diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..ced3f8d077 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: https://www.mayan-edms.com/donation/ diff --git a/.gitignore b/.gitignore index 2f445a7b83..41c58947cd 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,5 @@ static_collected/ 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 a5b56f4358..b4c2d0f0cb 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 firefox-geckodriver 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 @@ -169,8 +171,10 @@ test-mysql: services: - mysql:8.0.3 script: - - apt-get install -qq libmysqlclient-dev mysql-client - - pip install mysqlclient + - apt-get install -qq libmysqlclient-dev libssl-dev mysql-client + - . venv/bin/activate + - set -a && . ./config.env && set +a + - 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: @@ -185,7 +189,9 @@ test-postgres: - postgres script: - apt-get install -qq libpq-dev - - pip install psycopg2 + - . 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 tags: - postgres @@ -193,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/CONTRIBUTING.md b/CONTRIBUTING.md index 18dbe2cb77..14530c4023 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,21 +4,25 @@ Contributing to Mayan EDMS Issues ------ -- Before submitting a new issue, check for **open issues** first and join the -discussion. +- The issue system is for reporting problems with the program code. For +questions use the forum at: https://forum.mayan-edms.com/ +- Do not open issues asking for **support or consulting**. For paid support +and consultation visit: https://www.mayan-edms.com/support/ +- The issue must be related to the code only, do not open issues for problems +with databases, deployments, webservers, cloud providers, etc. +- Before submitting a new issue, check for **existing issues** first and +join the discussion. - If your issue is not attended in a while, **be patient**, the core team is small and the codebase big. -- Try to reproduce the issue using a **separate, clean installation**, sometimes -the issue can be caused by an error in a configuration file and not with the -code itself. -- **Do not upload** sensitive, private or classified information or files with -your issue. If the issue is triggered by a user file, create a dummy file with the -same properties that can trigger the issue and upload that file instead. +- Try to reproduce the issue using a **separate, clean installation**, +sometimes the issue can be caused by an error in a configuration file and +not with the code itself. +- **Do not upload** sensitive, private or classified information or files +with your issue. If the issue is triggered by a user file, create a dummy +file with the same properties that can trigger the issue and upload that +file instead. - Add steps that trigger the issue in a **repeatable manner**. - **Screenshots** go a long way in helping understand problems. -- The issue must be related to the code only, do not open issues for problems -with deployments, webservers, cloud providers, etc. -- Do not open issues asking for **support or consulting**. Code ---- diff --git a/HISTORY.rst b/HISTORY.rst index a2152d5e41..b60f050c98 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -1,3 +1,415 @@ +3.3.6 (2019-12-XX) +================== +- Make list toolbar stick to the top of the view when scrolling. +- Fix page count on some PDF files, and fix a Python 3 incompatibility. + GitLab merge !64. Thanks to O2 Graphics (@O2Graphics). +- Improve the executables paths on FreeBSD/OpenBSD. GitLab merge !63. + Thanks to O2 Graphics (@O2Graphics). +- Fix document orientation detection. GitLab issue #713. Thanks to + Rob de Canha-Knight (@rssfed23) for the report and debug information. +- Update the Redis lock connection initialization so that is works with Redis + versions < 5.0. GitLab issue #709. Rob de Canha-Knight (@rssfed23) for the + report and debug information. +- Update the ZipArchive class to work with badly encoded filenames. + GitLab issue #651. Thanks to Fabian (@ruffy91) for the report. +- Delete periodic task on document type delete. Closes GitLab + issue #715. Thanks to Rob de Canha-Knight (@rssfed23) for the + report and research. +- Add transaction handling to the interval sources delete and save + methods. +- Add support for functional tests using selenium. +- Add test for issue #494. +- Add support for configurable test view template. +- Add support for public test views. +- Reapply fix for issue #494. To avoid exploit of cross site scripting in + login view. Thanks to the Checkmarx SCA AppSec team for the research + regarding this issue for the recent version and thanks to Lokesh + (@lokesh1095) for the original report and solution. GitLab issue #494. +- Settings: Display overridden instead of overrided. + GitLab merge !65. Thanks to Rob de Canha-Knight (@rssfed23). +- Update the address of PyPI when checking for new versions to avoid + SSL errors from reusing the old address (pypi.python.org/pypi) + certificate. GitLab issue #717. Thanks to Jordan Wages (@wagesj45) + for the report. + +3.3.5 (2019-12-13) +================== +- Pin django-timezone-field to version 3.1. GitLab issue #698. + Thanks to Rob de Canha-Knight (@rssfed23) for the report + and research. +- Pin kombu to version 4.6.7. GitLab issue #699. Thanks to + Rob de Canha-Knight (@rssfed23) for the report and the research. +- Update instances of the word "weblink" to "web link". +- Unify the creation of the temporary config file used in tests. +- Update all 0001 setting migrations to accept manually migrated + settings. +- Update TemplateField to concatenate existing help texts. +- Don't show the edit and delete links for resolved web links. +- Exclude Smart link setup columns and links from the resolved + smart link views. +- TemplateField shows the available variable in the help text + automatically. +- Use TemplateField for the web link template. +- Use TemplateField for smart links. +- Add the ID and the URL to the checkout serializer. +- Add BaseTransformationType metaclass in a way compatible with + Python 2 and Python 3. +- Remove Django DownloadView library. Implement downloads natively + using a modified port of Django 2.2 FileResponse. +- Increase the role label field size from 64 to 128 characters. +- Increase the smart link label size from 96 to 128 characters. +- Increase the source label field size from 64 to 128 characters. +- Add missing link icons. +- Add missing field help texts. + +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. +- Update example LDAP authentication settings file. +- Update FAQ entry about the LDAP file. +- 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. +- Make the statistics slug field unique. +- Self-heal statistics results model when multiple + results are created using the same slug value. + Forum topic 1404. +- Update mayan_statistics migration 0002 to rename + duplicate slugs. +- Fix reverse inheritance permissions. +- Remove index create permission as an ACL permission + for indexes. +- Fix API example. +- Fix document check in via the API. GitLab issue #688. + Thanks to inam ul haq (@inam.sys) for the report. +- Improve supervisord upgrade instructions. Forum topic 880. + +3.2.10 (2019-11-19) +=================== +- Auto-import dependencies. No need to use: + from .dependencies import * # NOQA +- Add makefile target to run all tests in debug mode. + This mode is more strict and sidesteps a Django bug that + causes errors in the template code that to be silent during + tests. +- Rename expected_content_type to expected_content_types + and allow a list of content types to be specified. +- Add missing label to metadata and file metadata model + properties entries. +- Improve workflow field help text. Make it usable + for the creation/edit form help text and for the + column pop over. +- Fix NamedMultiWidget issue on Python 3. Affects + document checkout form. GitLab issue #683. Thanks + to John Bentley (@johnbentleyii) for the report. +- Add missing Event class cache invalidation when + calling the refresh() method. +- 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. +- Automate paths in documentation. +- Settings chapter improvements. +- Documentation paths consistency fixes. +- Expand custom Python setting section. + +3.2.9 (2019-11-03) +================== +- Move IMAPMockServer to its own module. +- Display feedback message when testing a mailing profile. +- Add tests to the platform app. +- Fix platformtemplate command --context option help message. +- Language translations update. +- Add target to run all translations targets. +- Backport color log formatter from branch version/next. +- Don't raise error checking AnonymousUser for permissions. + Instead return always False. +- Enable the main menu workflow runtime link when the workflow view + permission is granted to at least one workflow. +- Make Postgres container wait delay configurable. GitLab issue #677. + Thanks to Antenore Gatta (@antenore) for the report. +- Update Django to version 1.11.25. +- Update PyYAML to version 5.1.2. +- Update celery to version 3.1.26.post2. +- Update django-celery to version 3.2.2. +- Update pathlib2 to version 2.3.5. +- Update whitenoise to version 4.1.4. +- Update Pillow to version 6.2.1. +- Move Celery and Django Celery dependencies + to the task manager app. +- Improve dependecies app tests. +- Return st_nlink of 1 files in mirrored indexes. GitLab issue #676. + Thanks to Ezio Vernacotola (@eziove) for the report and solution. +- Fix MAYAN_GUNICORN_TIMEOUT Docker image setting. GitLab issue #671. + Thanks to Lennart Sauerbeck (@lennart_s) for the report. +- Add makefile target to launch a production staging Docker image. +- Improve duplicated document list view logic to not show + documents with trashed duplicates. +- Backport Docker composer makefile targets. +- Add PermissionTestCaseMixin and SmartSettingTestCaseMixin to better + organize cache invalidation of both apps for tests. +- Add a version attribute to setting namespace. These are dumped + as SMART_SETTINGS_NAMESPACES. +- Add savesettings command. +- Add extra logging to the IMAP email source. GitLab issue #682. + Thanks to Patrick Hütter (@PatrickHuetter) for the report. +- Rename all instances of the IMAP server from mailbox to + server for clarity. +- Add book link in the about menu. +- Add unknown exception handling when checking for the latest + version. + 3.2.8 (2019-10-01) ================== - Fix error when accessing some API entry points without diff --git a/Makefile b/Makefile index bffe667715..e215f705b5 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,11 @@ -.PHONY: clean-pyc clean-build +#!make +include config.env + +.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 @@ -18,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 @@ -26,17 +29,25 @@ test: clean-pyc test: ## MODULE= - Run tests for a single app, module or test class. ./manage.py test $(MODULE) --settings=mayan.settings.testing.development --nomigrations $(ARGUMENTS) +test-debug: clean-pyc +test-debug: ## MODULE= - Run tests for a single app, module or test class, in debug mode. + ./manage.py test $(MODULE) --settings=mayan.settings.testing.development --nomigrations --debug-mode $(ARGUMENTS) + test-all: ## Run all tests. test-all: clean-pyc ./manage.py test --mayan-apps --settings=mayan.settings.testing.development --nomigrations $(ARGUMENTS) +test-all-debug: ## Run all tests in debug mode. +test-all-debug: clean-pyc + ./manage.py test --mayan-apps --settings=mayan.settings.testing.development --nomigrations --debug-mode $(ARGUMENTS) + 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 - while ! docker inspect --format='{{json .State.Health}}' test-postgres|grep 'Status":"healthy"'; do sleep 1; done + pip install psycopg2==$(PYTHON_PSYCOPG2_VERSION) + 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 @@ -53,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 - while ! docker inspect --format='{{json .State.Health}}' test-mysql|grep 'Status":"healthy"'; do sleep 1; done + pip install mysqlclient==$(PYTHON_MYSQL_VERSION) + 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. @@ -75,9 +86,9 @@ 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 + pip install cx_Oracle==$(PYTHON_ORACLE_VERSION) while ! nc -z 127.0.0.1 49161; do sleep 1; done sleep 10 @@ -115,6 +126,9 @@ translations-push: ## Upload all translation files to Transifex. translations-pull: ## Download all translation files from Transifex. tx pull -f +translations-all: ## Execute all translations targets. +translations-all: translations-make translations-push translations-pull translations-compile + # Releases increase-version: ## Increase the version number of the entire project's files. @@ -227,27 +241,58 @@ generate-setup: generate-requirements generate-requirements: ## Generate all requirements files from the project depedency declarations. @./manage.py generaterequirements build > requirements/build.txt @./manage.py generaterequirements development > requirements/development.txt + @./manage.py generaterequirements documentation > requirements/documentation.txt + @./manage.py generaterequirements production --only=pathlib2 >> requirements/documentation.txt @./manage.py generaterequirements testing > requirements/testing-base.txt @./manage.py generaterequirements production --exclude=django > requirements/base.txt @./manage.py generaterequirements production --only=django > requirements/common.txt +gitlab-release-documentation: ## Trigger the documentation build and publication using GitLab CI +gitlab-release-documentation: + git push + 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 --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 --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 --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. @@ -258,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. @@ -269,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/README.md b/README.md index 37026453b4..0287717aca 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ [![Donation](https://img.shields.io/badge/donation-PayPal-brightgreen)](https://paypal.me/MayanEDMS) [![pypi][pypi]][pypi-url] -[![builds][builds]][builds-url] ![python][python] ![license][license] [![Docker pulls](https://img.shields.io/docker/pulls/mayanedms/mayanedms.svg?maxAge=3600)](https://hub.docker.com/r/mayanedms/mayanedms/) @@ -45,7 +44,7 @@

Book

-The pre-release version of the book "Exploring Mayan EDMS" available now at a discounted price! +The final version of the book "Exploring Mayan EDMS" available now!

@@ -53,8 +52,6 @@ The pre-release version of the book "Exploring Mayan EDMS" available now at a di

-Limited quantities. Buyers of the pre-release will get the full version for free when it is ready. - The link is https://sellfy.com/p/um2fkx/

Installation

diff --git a/README.rst b/README.rst index 25498d500c..b6fcfef242 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -|donation| |pypi| |builds| |coverage| |python| |license| |docker_pulls| |docker_stars| |docker_layers| +|donation| |pypi| |coverage| |python| |license| |docker_pulls| |docker_stars| |docker_layers| .. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png @@ -25,14 +25,13 @@ at: https://docs.mayan-edms.com/topics/installation.html .. _Docker: https://www.docker.com/ -The pre-release version of the book "Exploring Mayan EDMS" available now at a discounted price! +The final version of the book "Exploring Mayan EDMS" available now! .. image:: https://camo.githubusercontent.com/89d2fe787507c9247aa7bb406e2682b53eb7a5f9/68747470733a2f2f64313273776274773731397934732e636c6f756466726f6e742e6e65742f696d616765732f76365270785734302f615030714b4c6a6b50694175585a6859754234352f774441554c417a4679782e6a7065673f773d353438 :align: center :width: 300 :target: https://sellfy.com/p/um2fkx/ -Limited quantities. Buyers of the pre-release will get the full version for free when it is ready. Click the image or visit: https://sellfy.com/p/um2fkx/ Hardware requirements diff --git a/config.env b/config.env new file mode 100644 index 0000000000..cddd61cd2e --- /dev/null +++ b/config.env @@ -0,0 +1,16 @@ +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.2 +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.8.3 +PYTHON_PSUTIL_VERSION=5.6.2 +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 8e851725ca..80d88244bb 100755 --- a/contrib/scripts/install/docker.sh +++ b/contrib/scripts/install/docker.sh @@ -5,24 +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 @@ -44,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" @@ -51,10 +59,19 @@ echo "DOCKER_POSTGRES_IMAGE: $DOCKER_POSTGRES_IMAGE" 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 @@ -72,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 \ @@ -106,26 +152,47 @@ docker run -d \ $DOCKER_POSTGRES_IMAGE >/dev/null echo "Done" -echo -n "* Waiting for the PostgreSQL container to be ready (10 seconds)..." -sleep 10 +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" 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/contrib/settings/ldap_connection_settings.py b/contrib/settings/ldap_connection_settings.py index 6ae809a3be..a708ae9fb9 100644 --- a/contrib/settings/ldap_connection_settings.py +++ b/contrib/settings/ldap_connection_settings.py @@ -1,64 +1,139 @@ from __future__ import absolute_import +# Install Python LDAP with: +# $ pip install python-ldap +# or if using Docker, pass the environment variable MAYAN_PIP_INSTALLS: +# -e MAYAN_PIP_INSTALLS=python-ldap import ldap -from django_auth_ldap.config import LDAPSearch -from .base import * # NOQA -from django.contrib.auth import get_user_model +from django_auth_ldap.config import ( + LDAPSearch, LDAPSearchUnion, NestedActiveDirectoryGroupType +) -SECRET_KEY = '' +from mayan.settings.production import * -# makes sure this works in Active Directory -ldap.set_option(ldap.OPT_REFERRALS, 0) +# Makes sure this works in Active Directory +ldap.set_option(ldap.OPT_REFERRALS, False) -# This is the default, but I like to be explicit. +# Turn of debug output, turn this off when everything is working as expected +ldap.set_option(ldap.OPT_DEBUG_LEVEL, 1) + +# Default: True AUTH_LDAP_ALWAYS_UPDATE_USER = True -LDAP_USER_AUTO_CREATION = "False" -LDAP_URL = "ldap://:389/" -LDAP_BASE_DN = "dc=paramatrix,dc=co,dc=in" -LDAP_ADDITIONAL_USER_DN = "dc=people" -LDAP_ADMIN_DN = "" -LDAP_PASSWORD = "" +# Use TLS to talk to the LDAP server +# Requires acquiring the server's certificate +# $ openssl s_client -connect :636 +# Part of the output of this file will be the Base-64 encoded .cer file +# that was presented for LDAPS. Cut and paste into a file beginning at +# "-Begin Certificate" through "-End Certificate--" and save as a .crt, for +# example: ldapserver.crt +# $ CERT=ldapserver.crt +# $ cp /root/$CERT /usr/share/ca-certificates/$CERT +# # notice the + sign which tells to activate the certificate. +# $ echo "+$CERT" >/etc/ca-certificates/update.d/activate_my_cert +# $ dpkg-reconfigure ca-certificates; +AUTH_LDAP_START_TLS = False + +LDAP_ADDITIONAL_USER_DN = 'dc=people' +LDAP_ADMIN_DN = '' +LDAP_BASE_DN = 'dc=,dc=co,dc=in' +LDAP_PASSWORD = '' +LDAP_USER_AUTO_CREATION = 'False' +LDAP_URL = 'ldap://:389/' -AUTH_LDAP_SERVER_URI = LDAP_URL AUTH_LDAP_BIND_DN = LDAP_ADMIN_DN AUTH_LDAP_BIND_PASSWORD = LDAP_PASSWORD +AUTH_LDAP_SERVER_URI = LDAP_URL - +# Simple search AUTH_LDAP_USER_SEARCH = LDAPSearch( '%s,%s' % (LDAP_ADDITIONAL_USER_DN, LDAP_BASE_DN), ldap.SCOPE_SUBTREE, '(uid=%(user)s)' ) + +# If you need to search in more than one place for a user, you can use +# LDAPSearchUnion. This takes multiple LDAPSearch objects and returns the +# union of the results. The precedence of the underlying searches is +# unspecified. +# https://django-auth-ldap.readthedocs.io/en/latest/authentication.html +# AUTH_LDAP_USER_SEARCH = LDAPSearchUnion( +# LDAPSearch( +# 'ou=Users,ou=Admin,dc=,dc=local', ldap.SCOPE_SUBTREE, +# '(samaccountname=%(user)s)' +# ), +# LDAPSearch( +# 'ou=Users,ou=,dc=,dc=local', +# ldap.SCOPE_SUBTREE, '(samaccountname=%(user)s)' +# ), +# LDAPSearch( +# 'ou=Users,ou=,dc=,dc=local', +# ldap.SCOPE_SUBTREE, '(samaccountname=%(user)s)' +# ), +# ) + +# User attributes to map from LDAP to Mayan's user model. AUTH_LDAP_USER_ATTR_MAP = { 'first_name': 'cn', 'last_name': 'sn', 'email': 'mail' } +# Another example map +# AUTH_LDAP_USER_ATTR_MAP = { +# 'username': 'sAMAccountName', +# 'first_name': 'givenName', +# 'last_name': 'sn', +# 'email': 'mail' +# } +# Only string fields can be mapped to attributes. Boolean fields can be +# defined by group membership: +# AUTH_LDAP_USER_FLAGS_BY_GROUP = { +# 'is_active': 'cn=active,ou=groups,dc=example,dc=com', +# 'is_staff': ( +# LDAPGroupQuery('cn=staff,ou=groups,dc=example,dc=com') +# | LDAPGroupQuery('cn=admin,ou=groups,dc=example,dc=com') +# ), +# 'is_superuser': 'cn=superuser,ou=groups,dc=example,dc=com', +# } + +# Simple group search +# AUTH_LDAP_GROUP_SEARCH = LDAPSearch( +# 'ou=groups,dc=example,dc=com', ldap.SCOPE_SUBTREE, '(objectClass=groupOfNames)' +# ) +# AUTH_LDAP_GROUP_TYPE = GroupOfNamesType() + +# Advanced group search +# AUTH_LDAP_GROUP_SEARCH = LDAPSearchUnion( +# LDAPSearch( +# 'ou=Domain Global,OU=Security,OU=Groups,OU=,dc=,dc=local', +# ldap.SCOPE_SUBTREE, +# '(&(objectClass=group)(groupType:1.2.840.113556.1.4.803:=2147483648))' +# ), +# LDAPSearch( +# 'ou=Domain Global,OU=Security,OU=Groups,OU=,dc=,dc=local', +# ldap.SCOPE_SUBTREE, +# '(&(objectClass=group)(groupType:1.2.840.113556.1.4.803:=2147483648))' +# ), +# ) +# AUTH_LDAP_CACHE_GROUPS = True +# AUTH_LDAP_FIND_GROUP_PERMS = False +# AUTH_LDAP_GROUP_TYPE = NestedActiveDirectoryGroupType() +# AUTH_LDAP_MIRROR_GROUPS = True + +# To minimize traffic to the LDAP server, LDAPBackend can make use of +# Django’s cache framework to keep a copy of a user’s LDAP group memberships. +# To enable this feature, set AUTH_LDAP_CACHE_TIMEOUT, which determines +# the timeout of cache entries in seconds. +# AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600 + +# Limiting Access +# The simplest use of groups is to limit the users who are allowed to log in. +# If AUTH_LDAP_REQUIRE_GROUP is set, then only users who are members of that +# group will successfully authenticate. AUTH_LDAP_DENY_GROUP is the reverse: +# if given, members of this group will be rejected. +# AUTH_LDAP_REQUIRE_GROUP = 'cn=enabled,ou=groups,dc=example,dc=com' +# AUTH_LDAP_DENY_GROUP = 'cn=disabled,ou=groups,dc=example,dc=com' + AUTHENTICATION_BACKENDS = ( 'django_auth_ldap.backend.LDAPBackend', - 'mayan.settings.settings_local.EmailOrUsernameModelBackend', ) - - -class EmailOrUsernameModelBackend(object): - """ - This is a ModelBacked that allows authentication with either a username or an email address. - """ - def authenticate(self, username=None, password=None): - if '@' in username: - kwargs = {'email': username} - else: - kwargs = {'username': username} - try: - user = get_user_model().objects.get(**kwargs) - if user.check_password(password): - return user - except get_user_model().DoesNotExist: - return None - - def get_user(self, username): - try: - return get_user_model().objects.get(pk=username) - except get_user_model().DoesNotExist: - return None diff --git a/docker/Dockerfile b/docker/Dockerfile index eed441d8b2..356c24505c 100755 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,13 +1,15 @@ # vim:set ft=dockerfile: #### -# BASE_IMAGE - Bare bones image with the base packages needed to run Mayan EDMS +# 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" +COPY config.env /config.env + ENV PYTHONUNBUFFERED=1 \ LC_ALL=C.UTF-8 \ PROJECT_INSTALL_DIR=/opt/mayan-edms @@ -22,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 \ @@ -31,11 +34,11 @@ apt-get update \ graphviz \ libfuse2 \ libmagic1 \ - libmariadbclient18 \ + libmariadb3 \ libreoffice \ libpq5 \ poppler-utils \ - redis-server \ + python3-distutils \ sane-utils \ sudo \ supervisor \ @@ -54,24 +57,23 @@ 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 RUN printf "deb http://httpredir.debian.org/debian stretch-backports main non-free\ndeb-src http://httpredir.debian.org/debian stretch-backports main non-free" > /etc/apt/sources.list.d/backports.list \ && apt-get update \ && apt-get install -t stretch-backports -y tesseract-ocr tesseract-ocr-deu #### -# BUILDER_IMAGE - This image buildS the Python package and is discarded afterwards +# 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 +FROM base_image as builder_image + +# Python libraries caching +ARG PIP_INDEX_URL +ARG PIP_TRUSTED_HOST WORKDIR /src @@ -101,44 +103,49 @@ 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 USER mayan -RUN python -m virtualenv "${PROJECT_INSTALL_DIR}" \ + +RUN set -a \ +&& . /config.env \ +&& set +a \ +&& python3 -m venv "${PROJECT_INSTALL_DIR}" \ && . "${PROJECT_INSTALL_DIR}/bin/activate" \ -&& pip install --no-cache-dir --no-use-pep517 \ - librabbitmq==1.6.1 \ - mysql-python==1.2.5 \ - psycopg2==2.7.3.2 \ - redis==2.10.6 \ +&& 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 \ - psutil==5.6.2 \ + 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 +FROM base_image -COPY --from=BUILDER_IMAGE --chown=mayan:mayan "${PROJECT_INSTALL_DIR}/" "${PROJECT_INSTALL_DIR}/" +COPY --from=builder_image --chown=mayan:mayan "${PROJECT_INSTALL_DIR}/" "${PROJECT_INSTALL_DIR}/" USER root @@ -149,7 +156,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 bd2743759b..cf00170662 100755 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,25 +1,130 @@ -APT_PROXY ?= `/sbin/ip route|awk '/docker0/ { print $$9 }'`:3142 -IMAGE_VERSION ?= `cat docker/rootfs/version` +#!make +include config.env + +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-test-container: ## Build and run a test container. -docker-test-container: docker-build-with-proxy docker-test-cleanup - docker run -d --name test-mayan-edms -p 80:8000 -v test-mayan_data:/var/lib/mayan mayanedms/mayanedms:$(DOCKER_VERSION) +docker-runtest-container: ## Run a test container. +docker-runtest-container: docker-test-cleanup + docker run \ + -d \ + --name test-mayan-edms \ + -p 80:8000 \ + -v test-mayan_data:/var/lib/mayan \ + mayanedms/mayanedms:$(IMAGE_VERSION) -docker-test-cleanup: ## Delete the test container and the test volume. +docker-runtest-cleanup: ## Delete the test container and the test volume. @docker rm -f test-mayan-edms || true @docker volume rm test-mayan_data || true -docker-test-all: ## Build and executed the test suite in a test container. -docker-test-all: docker-build-with-proxy - docker run --rm run-tests +docker-runtest-all: ## Executed the test suite in a test container. + 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: 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 + +docker-staging-network-create: + @docker network rm mayan-staging || true + docker network create mayan-staging + +docker-staging-container-postgresql-start: + docker run \ + -d \ + --name mayan-staging-postgres \ + --network=mayan-staging \ + -e POSTGRES_USER=mayan \ + -e POSTGRES_DB=mayan \ + -e POSTGRES_PASSWORD=mayanuserpass \ + -v mayan-staging-postgres:/var/lib/postgresql/data \ + $(DOCKER_POSTGRES_IMAGE_VERSION) + +docker-staging-container-redis-start: + docker run \ + -d \ + --name mayan-staging-redis \ + --network=mayan-staging \ + -v mayan-staging-redis:/data \ + $(DOCKER_REDIS_IMAGE_VERSION) \ + redis-server \ + --databases \ + "2" \ + --maxmemory-policy \ + allkeys-lru \ + --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: + sleep 5 && docker run \ + -d \ + --name mayan-staging-app \ + --network=mayan-staging \ + -p 80:8000 \ + -e MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \ + -e MAYAN_DATABASE_HOST=mayan-staging-postgres \ + -e MAYAN_DATABASE_NAME=mayan \ + -e MAYAN_DATABASE_PASSWORD=mayanuserpass \ + -e MAYAN_DATABASE_USER=mayan \ + -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-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 f092941a75..9c25013dbb 100755 --- a/docker/rootfs/version +++ b/docker/rootfs/version @@ -1 +1 @@ -3.2.8 +3.3.6 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/__init__.py b/docs/__init__.py new file mode 100644 index 0000000000..e69de29bb2 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/book_cover.jpg b/docs/_static/book_cover.jpg new file mode 100644 index 0000000000..3eb727842a Binary files /dev/null and b/docs/_static/book_cover.jpg differ 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/_templates/donate.html b/docs/_templates/donate.html deleted file mode 100644 index 42850e33d2..0000000000 --- a/docs/_templates/donate.html +++ /dev/null @@ -1,16 +0,0 @@ -

Support

-

- Consulting and support plans are available, click here. -

-
-

- Or consider supporting Mayan EDMS by contributing to its development. (US tax payers, please note this contribution is not tax deductible). -

-
- - - - -
- -
diff --git a/docs/_templates/message_area.html b/docs/_templates/message_area.html new file mode 100644 index 0000000000..71dc332b9f --- /dev/null +++ b/docs/_templates/message_area.html @@ -0,0 +1,41 @@ + + +
+

Get the book!

+ + + + + +
+ +

+ On-site consulting and support plans are available, click here. +

+ +
+ +

+ Or consider donating to support the continued development of the project. +

+ +
+ + + + +
+
+ + diff --git a/docs/callbacks.py b/docs/callbacks.py new file mode 100644 index 0000000000..e6434d9c9a --- /dev/null +++ b/docs/callbacks.py @@ -0,0 +1,8 @@ +from __future__ import unicode_literals + + +def get_source_read_callback(substitutions): + def global_substitution_function(app, docname, source): + for old, new in substitutions: + source[0] = source[0].replace(old, new) + return global_substitution_function 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 5d65284308..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 \ - -d postgres:9.6 - - 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 e8ea814410..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 - ``/opt/mayan-edms/media`` 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=/opt/mayan-edms/media /opt/mayan-edms/bin/mayan-edms.py 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 /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 psycopg2==2.7.3.2 - -* Copy the newly created fallback config file:: - - cp /opt/mayan-edms/media/config_backup.yml /opt/mayan-edms/media/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: /opt/mayan-edms/media/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: /opt/mayan-edms/media/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: /opt/mayan-edms/media/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=/opt/mayan-edms/media /opt/mayan-edms/bin/mayan-edms.py 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=/opt/mayan-edms/media /opt/mayan-edms/bin/mayan-edms.py 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.rst deleted file mode 100644 index 425f3274f9..0000000000 --- a/docs/chapters/deploying.rst +++ /dev/null @@ -1,255 +0,0 @@ -****************** -Direct deployments -****************** - -Mayan EDMS should be deployed like any other Django_ project and -preferably using virtualenv_. Below are some ways to deploy and use Mayan EDMS. - -Being a Django_ and a Python_ project, familiarity with these technologies is -recommended to better understand why Mayan EDMS does some of the things it -does. - -Compilers and development libraries will be installed to compile runtime -libraries. LibreOffice and Poppler utils will also be installed as they are -used to convert document files. Supervisor (https://supervisord.org/), a -Process Control System, will be used to monitor and keep all Mayan processes -running. - - -Basic deployment -================ -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: -------------------------------- - If using a Debian_ or Ubuntu_ based Linux distribution, get the executable - requirements using:: - - sudo apt-get install g++ gcc ghostscript gnupg1 graphviz libfuse2 \ - libjpeg-dev libmagic1 libpq-dev libpng-dev libreoffice libtiff-dev \ - poppler-utils postgresql python-dev python-virtualenv redis-server \ - sane-utils supervisor tesseract-ocr zlib1g-dev -y - - .. note:: - - Platforms with the ARM CPU might also need additional requirements. - :: - - 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. - :: - - sudo adduser mayan --disabled-password --disabled-login --no-create-home --gecos "" - - -3. 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) - :: - - sudo mkdir /opt - - -4. 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. - :: - - sudo virtualenv /opt/mayan-edms - - -5. Make the mayan user the owner of the installation directory: ---------------------------------------------------------------- - :: - - sudo chown mayan:mayan /opt/mayan-edms -R - - -6. Install Mayan EDMS from PyPI: --------------------------------- - :: - - sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 mayan-edms - - -7. Install the Python client for PostgreSQL and Redis: ------------------------------------------------------- - :: - - sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 psycopg2==2.7.3.2 redis==2.10.6 - - .. note:: - - Platforms with the ARM CPU might also need additional requirements. - :: - - sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 psutil==5.6.2 - - -8. Create the database for the installation: --------------------------------------------- - :: - - sudo -u postgres psql -c "CREATE USER mayan WITH password 'mayanuserpass';" - sudo -u postgres createdb -O mayan mayan - - -9. 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. - - .. note:: - - For simplicity, the ``MAYAN_MEDIA_ROOT`` folder is set to be a subfolder - of the installation. If you want to keep your files separated from - the installation files, change the value of the ``MAYAN_MEDIA_ROOT`` - variable in this and all subsequent steps. Be sure to first create the - folder and give ownership of it to the ``mayan`` user with the ``chown`` - command. - - .. warning:: - - If this step is interrupted, even if it is later resumed, will - cause the automatic admin user to no be created in some cases. Make sure all - environment variable and values are correct. If this happens, refer to the - troubleshooting chapters: :ref:`troubleshooting-autoadmin-account` and - :ref:`troubleshooting-admin-password`. - - :: - - 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py initialsetup - - -10. 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py preparestatic --noinput - - -11. Create the supervisor file at ``/etc/supervisor/conf.d/mayan.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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf - - -12. Configure Redis: --------------------- - Configure Redis to discard data when it runs out of memory, not save its - database and only keep 1 database: - :: - - 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 - -13. Enable and restart the services [1_]: ------------------------------------------ - :: - - 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. - :: - - sudo apt-get remove --purge libjpeg-dev libpq-dev libpng-dev libtiff-dev zlib1g-dev - - -.. _deployment_advanced: - -Advanced deployment -=================== - -This variation uses RabbitMQ as the message broker. RabbitMQ consumes more -memory but scales to thousands of messages per second. RabbitMQ messages are also -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: --------------------- - - If using a Debian_ or Ubuntu_ based Linux distribution, get the executable - requirements using:: - - sudo apt-get install rabbitmq-server -y - - -2. Install the Python client for RabbitMQ: ------------------------------------------- - :: - - sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 librabbitmq==2.0.0 - - -3. Create the RabbitMQ user and vhost: --------------------------------------- - :: - - sudo rabbitmqctl add_user mayan mayanrabbitmqpassword - sudo rabbitmqctl add_vhost mayan - sudo rabbitmqctl set_permissions -p mayan mayan ".*" ".*" ".*" - - -4. Edit the supervisor file at ``/etc/supervisor/conf.d/mayan.conf``: ---------------------------------------------------------------------- - Replace (paying attention to the comma at the end):: - - MAYAN_BROKER_URL="redis://127.0.0.1:6379/0", - - with:: - - MAYAN_BROKER_URL="amqp://mayan:mayanrabbitmqpassword@localhost:5672/mayan", - - increase the number of Gunicorn workers to 3 in the line (``-w 2`` section):: - - command = /opt/mayan-edms/bin/gunicorn -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: ------------------------- - :: - - sudo supervisorctl restart all - - - - -[1]: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740 - -.. _Debian: https://www.debian.org/ -.. _Django: https://www.djangoproject.com/ -.. _Python: https://www.python.org/ -.. _SQLite: https://www.sqlite.org/ -.. _Ubuntu: http://www.ubuntu.com/ -.. _virtualenv: http://www.virtualenv.org/en/latest/index.html -.. _1: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740 diff --git a/docs/chapters/deploying.txt b/docs/chapters/deploying.txt new file mode 100644 index 0000000000..a0e943fd11 --- /dev/null +++ b/docs/chapters/deploying.txt @@ -0,0 +1,273 @@ +.. _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. + +Being a Django_ and a Python_ project, familiarity with these technologies is +recommended to better understand why Mayan EDMS does some of the things it +does. + +Compilers and development libraries will be installed to compile runtime +libraries. LibreOffice and Poppler utils will also be installed as they are +used to convert document files. Supervisor (https://supervisord.org/), a +Process Control System, will be used to monitor and keep all Mayan processes +running. + + +Basic deployment +================ +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. + +#. Install binary dependencies: + + If using a Debian_ or Ubuntu_ based Linux distribution, get the executable + 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 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: + + .. code-block:: bash + + sudo apt-get install libffi-dev libssl-dev -y + + +#. Create the user account for the installation: + + This will create an unprivileged user account that is also unable to login: + + .. code-block:: bash + + sudo adduser mayan --disabled-password --disabled-login --gecos "" + + +#. 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: + + .. code-block:: bash + + sudo mkdir /opt + + +#. 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: + + .. code-block:: bash + + sudo virtualenv |MAYAN_INSTALLATION_DIRECTORY| -p /usr/bin/python3 + + +#. Make the mayan user the owner of the installation directory: + + .. code-block:: bash + + sudo chown mayan:mayan |MAYAN_INSTALLATION_DIRECTORY| -R + + +#. Install Mayan EDMS from PyPI: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 mayan-edms + + +#. Install 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| + + +#. 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 + + +#. 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. + + .. note:: + + For simplicity, the ``MAYAN_MEDIA_ROOT`` folder is set to be a subfolder + of the installation. If you want to keep your files separated from + the installation files, change the value of the ``MAYAN_MEDIA_ROOT`` + variable in this and all subsequent steps. Be sure to first create the + folder and give ownership of it to the ``mayan`` user with the ``chown`` + command. + + .. 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 + happens, refer to the troubleshooting chapters: + :ref:`troubleshooting-autoadmin-account` and + :ref:`troubleshooting-admin-password`. + + .. 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| initialsetup + + +#. Collect the static files: + + This step merges and compressed static media files so they can be served more + effectively. + + .. code-block:: bash + + sudo -u mayan MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| \ + |MAYAN_BIN| preparestatic --noinput + + +#. Create the supervisor file at ``|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|" + + +#. Configure Redis: + + Configure Redis to discard data when it runs out of memory, not save its + database and only keep 2 database: + + .. code-block:: bash + + 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 + + +#. Cleaning up: + + 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: + +Advanced deployment +=================== + +This variation uses RabbitMQ as the message broker. RabbitMQ consumes more +memory but scales to thousands of messages per second. RabbitMQ messages are also +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. + + +#. Install RabbitMQ: + + If using a Debian_ or Ubuntu_ based Linux distribution, get the executable + requirements using: + + .. code-block:: bash + + sudo apt-get install rabbitmq-server -y + + +#. Install the Python client for RabbitMQ: + + .. code-block:: bash + + sudo -u mayan |MAYAN_PIP_BIN| install --no-use-pep517 amqp==|PYTHON_AMQP_VERSION| + + +#. 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 ".*" ".*" ".*" + + +#. Edit the supervisor file at ``|MAYAN_SUPERVISOR_CONF|``: + + Replace (paying attention to the comma at the end): + + .. code-block:: ini + + MAYAN_CELERY_BROKER_URL="redis://127.0.0.1:6379/0", + + 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``). + + +#. 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/ +.. _Django: https://www.djangoproject.com/ +.. _Python: https://www.python.org/ +.. _SQLite: https://www.sqlite.org/ +.. _Ubuntu: http://www.ubuntu.com/ +.. _virtualenv: http://www.virtualenv.org/en/latest/index.html +.. _1: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740 diff --git a/docs/chapters/development.rst b/docs/chapters/development.rst deleted file mode 100644 index e4629688af..0000000000 --- a/docs/chapters/development.rst +++ /dev/null @@ -1,560 +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 development - $ 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 - -#. 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 ------------------------ - -#. Switch to the ``releases/all`` branch and merge the latest changes: - :: - - git checkout releases/all - git merge versions/next - -#. Push code to trigger builds: - :: - - git push - -#. Push tag upstream: - :: - - git push --tags - - -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 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 b2e0c5f4c6..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 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 version 9.6 of the Docker PostgreSQL image:: - - docker pull postgres:9.6 - -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 \ - -d postgres:9.6 - -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 \ - -d postgres:9.6 - -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..5ce3ad3a00 --- /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 90% rename from docs/chapters/ocr_backend.rst rename to docs/chapters/ocr_backend.txt index a08eaba30b..aedb603ee5 100644 --- a/docs/chapters/ocr_backend.rst +++ b/docs/chapters/ocr_backend.txt @@ -1,10 +1,10 @@ -*********** +=========== OCR backend -*********** +=========== Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract (https://github.com/tesseract-ocr/tesseract/), but it can -use other engines. To support other engines crate a wrapper that subclasses the +use other engines. To support other engines create a wrapper that subclasses the ``OCRBackendBase`` class defined in mayan/apps/ocr/classes. This subclass should expose the ``execute`` method. For an example of how the Tesseract backend is implemented take a look at the file ``mayan/apps/ocr/backends/tesseract.py`` 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 96% rename from docs/chapters/api.rst rename to docs/chapters/rest_api.txt index 4c542ae163..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 @@ -57,7 +57,7 @@ Get a list of document types:: Upload a new document:: - with open('test_document.pdf', mode='rb') as + with open('test_document.pdf', mode='rb') as file_object: requests.post('http://127.0.0.1:8000/api/documents/', auth=('username', 'password'), files={'file': file_object}, data={'document_type': 1}).json() {u'description': u'', diff --git a/docs/chapters/scaling_up.rst b/docs/chapters/scaling_up.rst deleted file mode 100644 index 01a59cecb3..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 = /opt/mayan-edms/bin/gunicorn -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 rabbitmq:3 - -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 75% rename from docs/chapters/settings.rst rename to docs/chapters/settings.txt index 3cd83838ce..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 @@ -58,16 +58,18 @@ to be valid. You can revert manually by copy the file or by using the Via Python settings files ========================= -Another way to configure Mayan EDMS is via Python-style, settings files. +Another way to configure Mayan EDMS and the one required when more extensive +setup is required, such as when using external Python libraries, is via +Python-style, settings files. If Mayan EDMS was installed using the Python package a ``mayan_settings`` folder will created for this purpose. If you installed Mayan EDMS according to the :doc:`../chapters/deploying` instructions provided in this documentation your ``mayan_settings`` folder should be located in the directory: -``/usr/share/mayan-edms/mayan/media/mayan_settings``. +``|MAYAN_MEDIA_ROOT|/mayan_settings/``. 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``. @@ -80,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 @@ -100,13 +102,24 @@ For the :doc:`../chapters/deploying` method, the full import path will be ``mayan.media.mayan_settings.mysettings`` and can be passed via the ``--settings`` command line argument like this:: - python manage.py runserver --settings=mayan.media.mayan_settings.mysettings + |MAYAN_BIN| runserver --settings=mayan.media.mayan_settings.mysettings or via the ``DJANGO_SETTINGS_MODULE`` environment variable like this:: export DJANGO_SETTINGS_MODULE=mayan.media.mayan_settings.mysettings -For the :doc:`../chapters/docker` installation method, the full import path will be +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 +``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/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 520ff4791e..603d190896 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,12 +13,20 @@ from __future__ import unicode_literals # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import os +import sys + +from docutils.parsers.rst import directives sys.path.insert(0, os.path.abspath('..')) +sys.path.insert(1, os.path.abspath('.')) import mayan +import callbacks +import patches +import utils + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. @@ -29,15 +37,14 @@ sys.path.append( # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' +# needs_sphinx = '1.0' # 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.ext.extlinks', 'sphinxcontrib.blockdiag', - 'sphinxcontrib.spelling' + 'sphinx_sitemap', 'sphinx.ext.extlinks', 'sphinxcontrib.blockdiag', + 'sphinxcontrib.spelling', ] blockdiag_antialias = True @@ -48,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' @@ -72,20 +79,20 @@ release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. -#language = None +# language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: -#today = '' +# today = '' # Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' +# today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None +# default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. add_function_parentheses = True @@ -102,7 +109,7 @@ show_authors = False pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] +# modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- @@ -115,27 +122,27 @@ html_theme = 'sphinx_rtd_theme' # further. For a list of options available for each theme, see the # documentation. html_theme_options = { - 'analytics_id': 'UA-52965619-6', + 'analytics_id': 'UA-52965619-6' } # Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] +# html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". -#html_title = None +# html_title = None # A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None +# html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. -#html_logo = None +# html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. -#html_favicon = None +# html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, @@ -148,40 +155,40 @@ html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. -#html_use_smartypants = True +# html_use_smartypants = True # Custom sidebar templates, maps document names to template names. -#html_sidebars = {} +# html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. -#html_additional_pages = {} +# html_additional_pages = {} # If false, no module index is generated. -#html_domain_indices = True +# html_domain_indices = True # If false, no index is generated. -#html_use_index = True +# html_use_index = True # If true, the index is split into individual pages for each letter. -#html_split_index = False +# html_split_index = False # If true, links to the reST sources are added to the pages. html_show_sourcelink = False # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True +# html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True +# html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. -#html_use_opensearch = '' +# html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None +# html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'MayanEDMSdoc' @@ -191,40 +198,42 @@ html_show_sphinx = False # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' +# latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' +# latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ - ('index', 'MayanEDMS.tex', 'Mayan EDMS Documentation', - mayan.__author__, 'manual'), + ( + 'index', 'MayanEDMS.tex', 'Mayan EDMS Documentation', + mayan.__author__, 'manual' + ), ] # The name of an image file (relative to this directory) to place at the top of # the title page. -#latex_logo = None +# latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. -#latex_use_parts = False +# latex_use_parts = False # If true, show page references after internal links. -#latex_show_pagerefs = False +# latex_show_pagerefs = False # If true, show URL addresses after external links. -#latex_show_urls = False +# latex_show_urls = False # Additional stuff for the LaTeX preamble. -#latex_preamble = '' +# latex_preamble = '' # Documents to append as an appendix to all manuals. -#latex_appendices = [] +# latex_appendices = [] # If false, no module index is generated. -#latex_domain_indices = True +# latex_domain_indices = True # -- Options for manual page output -------------------------------------------- @@ -251,9 +260,52 @@ extlinks = { ), 'gitlab-issue': ( 'https://gitlab.com/mayan-edms/mayan-edms/issues/%s', 'GitLab issue #' + ), + 'gitlab-merge': ( + 'https://gitlab.com/mayan-edms/mayan-edms/merge_requests/%s', + 'GitLab merge request #' ) } +# -- Options for sitemap extension --------------------------------------------- + +html_baseurl = 'https://docs.mayan-edms.com/' + def setup(app): - app.add_stylesheet('css/custom.css') + BASE_DIRECTORY = '/opt/' + MAYAN_INSTALLATION_DIRECTORY = os.path.join(BASE_DIRECTORY, 'mayan-edms') + MAYAN_MEDIA_ROOT = os.path.join(MAYAN_INSTALLATION_DIRECTORY, 'media') + MAYAN_PYTHON_BIN_DIR = os.path.join(MAYAN_INSTALLATION_DIRECTORY, 'bin') + MAYAN_GUNICORN_BIN = os.path.join(MAYAN_PYTHON_BIN_DIR, 'gunicorn') + MAYAN_PIP_BIN = os.path.join(MAYAN_PYTHON_BIN_DIR, 'pip') + MAYAN_BIN = os.path.join(MAYAN_PYTHON_BIN_DIR, 'mayan-edms.py') + SUPERVISOR_ETC_PATH = '/etc/supervisor/conf.d/' + MAYAN_SUPERVISOR_CONF = os.path.join(SUPERVISOR_ETC_PATH, 'mayan.conf') + + environment_variables = utils.load_env_file() + environment_variables['DOCKER_MAYAN_IMAGE_VERSION'] = mayan.__version__ + environment_variables['MAYAN_INSTALLATION_DIRECTORY'] = MAYAN_INSTALLATION_DIRECTORY + environment_variables['MAYAN_MEDIA_ROOT'] = MAYAN_MEDIA_ROOT + environment_variables['MAYAN_PYTHON_BIN_DIR'] = MAYAN_PYTHON_BIN_DIR + environment_variables['MAYAN_GUNICORN_BIN'] = MAYAN_GUNICORN_BIN + environment_variables['MAYAN_BIN'] = MAYAN_BIN + environment_variables['MAYAN_PIP_BIN'] = MAYAN_PIP_BIN + environment_variables['SUPERVISOR_ETC_PATH'] = SUPERVISOR_ETC_PATH + environment_variables['MAYAN_SUPERVISOR_CONF'] = MAYAN_SUPERVISOR_CONF + substitutions = utils.generate_substitutions( + dictionary=environment_variables + ) + + app.add_stylesheet(filename='css/custom.css') + app.connect( + event='source-read', callback=callbacks.get_source_read_callback( + substitutions=substitutions + ) + ) + directives.register_directive( + name='include', directive=patches.monkey_patch_include( + substitutions=substitutions + ) + ) + utils.patch_theme_template(app, templates_path=templates_path[0]) 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 73% rename from docs/topics/faq.rst rename to docs/parts/faq.txt index a06ed9cda3..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,21 +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. +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 @@ -190,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 @@ -205,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 68% rename from docs/topics/troubleshooting.rst rename to docs/parts/troubleshooting.txt index c8498acddc..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,26 +79,25 @@ 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:: MAYAN_MEDIA_ROOT= /bin/mayan-edms.py changepassword admin If you followed the deploying instructions from the documentation your -``MAYAN_MEDIA_ROOT`` will be ``/opt/mayan-edms/media``. +``MAYAN_MEDIA_ROOT`` will be ``|MAYAN_MEDIA_ROOT|``. If using a Docker image, execute the command inside the container. First you need to know the name of the Docker container running Mayan EDMS on your setup @@ -110,7 +107,7 @@ with:: Then execute the password reset command inside the Docker container:: - docker exec -ti /opt/mayan-edms/bin/mayan-edms.py changepassword admin + docker exec -ti |MAYAN_BIN| changepassword admin Another way to do this is to execute a shell inside the container to get a command prompt:: @@ -119,23 +116,23 @@ command prompt:: And then execute the command:: - /opt/mayan-edms/bin/mayan-edms.py changepassword admin + |MAYAN_BIN| changepassword admin .. _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. To create an admin super user account manually use the command:: - MAYAN_MEDIA_ROOT= /bin/mayan-edms.py createsuperuser + MAYAN_MEDIA_ROOT=|MAYAN_MEDIA_ROOT| |MAYAN_BIN| createsuperuser If you followed the deploying instructions from the documentation your -``MAYAN_MEDIA_ROOT`` will be ``/opt/mayan-edms/media``. +``MAYAN_MEDIA_ROOT`` will be ``|MAYAN_MEDIA_ROOT|``. If using a Docker image, execute the command inside the container. First find you container name with:: @@ -144,7 +141,7 @@ find you container name with:: Then execute the command inside the container:: - docker exec -ti /opt/mayan-edms/bin/mayan-edms.py createsuperuser + docker exec -ti |MAYAN_BIN| createsuperuser Another way to do this is to execute a shell inside the container to get a command prompt:: @@ -153,15 +150,14 @@ command prompt:: And then execute the command:: - /opt/mayan-edms/bin/mayan-edms.py createsuperuser + |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/patches.py b/docs/patches.py new file mode 100644 index 0000000000..ad8d31d733 --- /dev/null +++ b/docs/patches.py @@ -0,0 +1,36 @@ +from __future__ import unicode_literals + +import inspect + +import docutils.parsers.rst.directives.misc +from sphinx.directives.other import Include as SphinxInclude + + +def monkey_patch_include(substitutions): + """ + Monkey patch docutil's Include directive to support global substitutions. + The Include class doesn't have a hook to modify the content before + inserting it back, so we add a call to our own transformation + method. We patch the base Include class, recreate Sphinx's Include class, + and register it as the new main include directive. + All this avoids copy and paste of the original code here. + """ + source_code = ''.join(inspect.getsourcelines( + docutils.parsers.rst.directives.misc.Include)[0] + ) + source_code = source_code.replace( + 'self.state_machine.insert_input(include_lines, path)', + 'include_lines=self.global_substitution(lines=include_lines)\n self.state_machine.insert_input(include_lines, path)', + ) + exec(source_code, docutils.parsers.rst.directives.misc.__dict__) + + class Include(docutils.parsers.rst.directives.misc.Include, SphinxInclude): + def global_substitution(self, lines): + result = [] + for line in lines: + for old, new in substitutions: + line = line.replace(old, new) + result.append(line) + return result + + return Include 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 95% rename from docs/releases/3.2.1.rst rename to docs/releases/3.2.1.txt index fc3057dab5..a41a8306e5 100644 --- a/docs/releases/3.2.1.rst +++ b/docs/releases/3.2.1.txt @@ -79,10 +79,10 @@ 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:: - MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" Edit the supervisord configuration file and update any setting the template generator missed:: diff --git a/docs/releases/3.2.10.txt b/docs/releases/3.2.10.txt new file mode 100644 index 0000000000..9e55239232 --- /dev/null +++ b/docs/releases/3.2.10.txt @@ -0,0 +1,172 @@ +Version 3.2.10 +============== + +Released: November 19, 2019 + +Changes +------- + +Dependencies +^^^^^^^^^^^^ + +App dependencies are now automatically imported ensuring there are no missing +dependencies when installing or upgrading. + +For developers this means that the line:: + + from .dependencies import * # NOQA + +is no longer needed. + + +Documentation +^^^^^^^^^^^^^ + +Improvements in the settings chapter. + +The file paths in the documentation are now inserted programmatically. +This ensures consistency and avoid human error when copying and pasting path +when writing documentation chapters. + + +Testing +^^^^^^^ + +New targets for the makefile to run all tests in debug mode. This mode is +more strict and sidesteps a Django bug that causes errors in the template +code that to be silent during tests. + +Renamed the ``expected_content_type`` to ``expected_content_types`` and +allow a list of content types to be specified. + +Added missing ``Event`` class cache invalidation when calling the +``refresh()`` method. + + +Python 3 +^^^^^^^^ + +Fixed an issue with the NamedMultiWidget class on Python 3. This issue +affected the document checkout form. This closes GitLab issue #683. Thanks +to John Bentley (@johnbentleyii) for the report. + + +Statistics +^^^^^^^^^^ + +Statistics code were updated to use timezone aware date. This solves a few +off-by-one-day results. + + +Workflows +^^^^^^^^^ + +When renaming custom workflow state actions, the workflow system would +error out when trying to show the label of the deleted or removed class. A +placeholder label will now be shown on invalid action classes reading +"Unknown action type". + +The help text for workflows was improved. + + +Indexing +^^^^^^^^ + +The missing label for document metadata and file metadata model +properties entries were added. No functional changes were made just visual. + + +Removals +-------- + +- None + + +Upgrading from a previous version +--------------------------------- + +If installed via Python's PIP +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Remove deprecated requirements:: + + sudo -u mayan curl https://gitlab.com/mayan-edms/mayan-edms/raw/master/removals.txt -o /tmp/removals.txt && sudo -u mayan |MAYAN_PIP_BIN| uninstall -y -r /tmp/removals.txt + +Type in the console:: + + sudo -u mayan |MAYAN_PIP_BIN| install mayan-edms==3.2.10 + +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 uncompress 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|" + +Edit the supervisord configuration file and update any setting the template +generator missed:: + + 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 + +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:`683` Checkout Form Does not Appear in Python 3.6 + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/3.2.11.txt b/docs/releases/3.2.11.txt new file mode 100644 index 0000000000..2a9449b66e --- /dev/null +++ b/docs/releases/3.2.11.txt @@ -0,0 +1,176 @@ +Version 3.2.11 +============== + +Released: November 28, 2019 + +Changes +------- + + +Checkouts +^^^^^^^^^ + +An issue with the request introspection of the API endpoint for checking in +documents was causing server internal error (HTTP 500 error) has been fixed. + + +Database integrity +^^^^^^^^^^^^^^^^^^ + +Database transaction improvements from the version 3.3 branch were backported. +Document events now trigger inside the same database transaction as document +changes. This change will ensure the expected behavior of other elements that +rely on this event even under the most heavy system loads and severe +database/network infrastructure problems. + + +Documentation +^^^^^^^^^^^^^ + +The example LDAP file was improved. This is a community contributed file and +not officially supported. For LDAP integration be sure to check and select +one of the official support and/or consultation alternatives +(https://www.mayan-edms.com/support/). + +The LDAP entry of the FAQ was expanded with user feedback. + +All the requirements to build the documentation are now generated +automatically using Mayan's internal dependency system. + +The documentation now provides a sitemap to help in indexing and searching for +information. + +A missing detail of the API integration example to upload new documents has +been added. + +The update instructions to upgrade the supervisord configuration file were +improve to work around some Linux shell differences. This makes the +instructions work for more users. + + +Permissions +^^^^^^^^^^^ + +The index create permission was removed as a possible permission to grant +for existing indexes, as this is semantically incorrect. + +An issue with reverse inheritance permission detection was fixed. It is now +possible to grant document permissions via the document type under all +situations and deployment types. + + +Statistics +^^^^^^^^^^ + +In some situations where improper horizontal scaling is used, the statistics +result model could end up with duplicate slug field entries. This field is +meant to be unique. Although this is a external issue, the situation is now +prevented by making the field unique at the database level, adding a data +migration to fix existing installations experiencing this issue, and by +adding code that will detect and self-heal future occurrences of this. + + +Other changes +^^^^^^^^^^^^^ + +The file patching code from the Dependency class to a generalized utility +of the storages app. This code is now used in several places including the +documentation global variable substitution. + + +Removals +-------- + +- None + + +Upgrading from a previous version +--------------------------------- + +If installed via Python's PIP +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Remove deprecated requirements:: + + sudo -u mayan curl https://gitlab.com/mayan-edms/mayan-edms/raw/master/removals.txt -o /tmp/removals.txt && sudo -u mayan |MAYAN_PIP_BIN| uninstall -y -r /tmp/removals.txt + +Type in the console:: + + sudo -u mayan |MAYAN_PIP_BIN| install mayan-edms==3.2.11 + +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 uncompress 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|" + +Edit the supervisord configuration file and update any setting the template +generator missed:: + + 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 + +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:`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 95% rename from docs/releases/3.2.2.rst rename to docs/releases/3.2.2.txt index 150b413f5b..ba00cb3444 100644 --- a/docs/releases/3.2.2.rst +++ b/docs/releases/3.2.2.txt @@ -72,10 +72,10 @@ 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:: - MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" Edit the supervisord configuration file and update any setting the template generator missed:: diff --git a/docs/releases/3.2.3.rst b/docs/releases/3.2.3.txt similarity index 95% rename from docs/releases/3.2.3.rst rename to docs/releases/3.2.3.txt index 4abfc380fc..ede1e5a800 100644 --- a/docs/releases/3.2.3.rst +++ b/docs/releases/3.2.3.txt @@ -77,10 +77,10 @@ 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:: - MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" Edit the supervisord configuration file and update any setting the template generator missed:: diff --git a/docs/releases/3.2.4.rst b/docs/releases/3.2.4.txt similarity index 96% rename from docs/releases/3.2.4.rst rename to docs/releases/3.2.4.txt index 1dd4e3f4bb..5bb1bb255a 100644 --- a/docs/releases/3.2.4.rst +++ b/docs/releases/3.2.4.txt @@ -95,10 +95,10 @@ 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 MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" Edit the supervisord configuration file and update any setting the template generator missed:: diff --git a/docs/releases/3.2.5.rst b/docs/releases/3.2.5.txt similarity index 95% rename from docs/releases/3.2.5.rst rename to docs/releases/3.2.5.txt index d0d0065f98..77f37336fc 100644 --- a/docs/releases/3.2.5.rst +++ b/docs/releases/3.2.5.txt @@ -80,10 +80,10 @@ 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 MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" Edit the supervisord configuration file and update any setting the template generator missed:: diff --git a/docs/releases/3.2.6.rst b/docs/releases/3.2.6.txt similarity index 95% rename from docs/releases/3.2.6.rst rename to docs/releases/3.2.6.txt index 0e897a24c9..4c8be02e4c 100644 --- a/docs/releases/3.2.6.rst +++ b/docs/releases/3.2.6.txt @@ -72,10 +72,10 @@ 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 MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" Edit the supervisord configuration file and update any setting the template generator missed:: diff --git a/docs/releases/3.2.7.rst b/docs/releases/3.2.7.txt similarity index 97% rename from docs/releases/3.2.7.rst rename to docs/releases/3.2.7.txt index 2054f37b80..62efbc4ae2 100644 --- a/docs/releases/3.2.7.rst +++ b/docs/releases/3.2.7.txt @@ -99,10 +99,10 @@ 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 MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" Edit the supervisord configuration file and update any setting the template generator missed:: diff --git a/docs/releases/3.2.8.rst b/docs/releases/3.2.8.txt similarity index 96% rename from docs/releases/3.2.8.rst rename to docs/releases/3.2.8.txt index ce6c37db6e..f7b5fd27a6 100644 --- a/docs/releases/3.2.8.rst +++ b/docs/releases/3.2.8.txt @@ -119,10 +119,10 @@ 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 MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \ + 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=/opt/mayan-edms/media \ - /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" Edit the supervisord configuration file and update any setting the template generator missed:: diff --git a/docs/releases/3.2.9.txt b/docs/releases/3.2.9.txt new file mode 100644 index 0000000000..a4b5e477bb --- /dev/null +++ b/docs/releases/3.2.9.txt @@ -0,0 +1,227 @@ +Version 3.2.9 +============= + +Released: November 3, 2019 + + +Changes +------- + + +Debugging +^^^^^^^^^ + +The colored log formatter was ported from the versions/next branch. The +color of the log output will be determined by the log level. + +Extra logging was added to the IMAP source to help with import issues. +This relates to GitLab issue #682. + + +Dependencies +^^^^^^^^^^^^ + +The help message of the ``--context`` option of the ``platformtemplate`` +command was fixed to say "YAML" instead of "JSON". + +The Celery and Django Celery dependencies were moved to the task +manager app. + +Some dependencies were updated to a new version: + +- Update Django to version 1.11.25. +- Update PyYAML to version 5.1.2. +- Update celery to version 3.1.26.post2. +- Update django-celery to version 3.2.2. +- Update pathlib2 to version 2.3.5. +- Update whitenoise to version 4.1.4. +- Update Pillow to version 6.2.1. + + +Docker +^^^^^^ + +The Mayan EDMS launcher script at get.mayan-edms.com was updated to allow +configuring the wait delay after the PostgreSQL container is launched. The +environment variable for this is called ``DOCKER_POSTGRES_DELAY`` and +defaults to 10 seconds to preserve the existing behavior. This closes +GitLab issue #677. + +A formatting error was fixed enabling again the use of the +MAYAN_GUNICORN_TIMEOUT Docker image setting. Closes GitLab issue #671. + + +Duplicates +^^^^^^^^^^ + +The duplicated document list view logic was improved and will not show +documents with trashed duplicates. + + +Mirroring +^^^^^^^^^ + +Mirrored document entries will now return 1 on their ``st_nlink`` attribute, +fixing access errors in some operating systems. Fixes GitLab issue #676. + + +Permissions +^^^^^^^^^^^ + +Instead of adding check to every API endpoint for authentication, the +permission was updated to return False to any permission check for +anonymous users. This change centralizes this check in a single place +and lowers the probability of error on non authenticated API access. + + +Settings +^^^^^^^^ + +To reduce config file incompatibilities between versions, the setting +namespaces will now include a version attribute. This attribute is +saved along with all the other settings when the ``config.yml`` is saved. +This version attribute will allow apps to read entries in older formats +instead of raising an error. + +A new management command was added, this is the ``savesettings`` command. +This command does the same things as saving a setting from the user interface, +it will update the ``config.yml`` file or create it, if it doesn't exists. + + +Testing +^^^^^^^ + +Several improvements to the test system were ported from unreleased branches. +All the mocked object were moved to their own module called mocks.py for each +respective app. + +Test were added to the platform app and improved for the dependencies app. + +The mixins PermissionTestCaseMixin and SmartSettingTestCaseMixin were added +to better organize cache invalidation of both apps for tests. + + +User interface +^^^^^^^^^^^^^^ + +A message is now displayed when testing a mailing profile. + +Granting the workflow view permission to at least on workflow will now enable +the workflow main menu workflow link. + + +Other changes +^^^^^^^^^^^^^ + +- Language translations update. +- Add makefile target to run all translations targets. +- Add makefile target to launch a production staging Docker image. +- Backport Docker composer makefile targets. +- Rename all instances of the IMAP server variable from mailbox to + server for clarity. +- Add book link in the about menu. +- Add unknown exception handling when checking for the latest + version. + + + +Removals +-------- + +- None + + +Upgrading from a previous version +--------------------------------- + +If installed via Python's PIP +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Remove deprecated requirements:: + + sudo -u mayan curl https://gitlab.com/mayan-edms/mayan-edms/raw/master/removals.txt -o /tmp/removals.txt && sudo -u mayan /opt/mayan-edms/bin/pip uninstall -y -r /tmp/removals.txt + +Type in the console:: + + sudo -u mayan /opt/mayan-edms/bin/pip install mayan-edms==3.2.9 + +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 uncompress 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 /etc/supervisor/conf.d/mayan.conf /etc/supervisor/conf.d/mayan.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=/opt/mayan-edms/media \ + /opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf" + +Edit the supervisord configuration file and update any setting the template +generator missed:: + + sudo vi /etc/supervisor/conf.d/mayan.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=/opt/mayan-edms/media \ + /opt/mayan-edms/bin/mayan-edms.py performupgrade + +Add new static media:: + + sudo -u mayan MAYAN_MEDIA_ROOT=/opt/mayan-edms/media \ + /opt/mayan-edms/bin/mayan-edms.py preparestatic --noinput + +The upgrade procedure is now complete. + + +Backward incompatible changes +----------------------------- + +- None + + +Bugs fixed or issues closed +--------------------------- + +- :gitlab-issue:`659` GitLab config: '.gitlab-ci.yml' does not specify the + exact version of all dependencies +- :gitlab-issue:`676` Access fuse mounted index via samba +- :gitlab-issue:`671` [Docker] MAYAN_GUNICORN_TIMEOUT timeout not passed + to worker +- :gitlab-issue:`677` Django start before PostgreSQL is up. +- :forum-topic:`1347` Workflow state action: perform a POST request + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ 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.5.txt b/docs/releases/3.3.5.txt new file mode 100644 index 0000000000..3212dd28fe --- /dev/null +++ b/docs/releases/3.3.5.txt @@ -0,0 +1,266 @@ +Version 3.3.5 +============= + +Released: December 13, 2019 + + +Changes +------- + + +Checkouts +^^^^^^^^^ + +The ID and URL of the checkout model was added the serializer. This adds +these two fields to the entries of the checkout list API view. This change +makes it easy to determine which checkout resource to delete to check in a +document. + + +Database +^^^^^^^^ + +The size of several fields was increased. These were: +role label field size from 64 to 128 characters, smart link label size from +96 to 128 characters, and the source label field size from 64 to 128 +characters. + +Migrations were added to all changes and these will me applied automatically +during upgrade. + + +Dependencies +^^^^^^^^^^^^ + +Versions of django-timezone-field and kombu were pinned to specific version +known to work correctly. This avoids two installations of Mayan EDMS to end +up with different versions of these two libraries. + + +Downloads +^^^^^^^^^ + +The library Django DownloadView was removed. The code to support all +downloads (document, version, keys, signatures) was been implement natively +using a modified port of Django 2.2 FileResponse. + + +Settings +^^^^^^^^ + +All initial setting migrations have been updated to accept manually migrated +settings too. + + +Templating +^^^^^^^^^^ + +The web link template field and the smart links fields were updated to use +the new TemplateField form field. This is the same field used in the +templating sandbox. + + +Testing +^^^^^^^ + +The of creating the temporary config file used in setting tests has been +unified. All setting tests create the test config file in a predictable way +now. + + +User interface +^^^^^^^^^^^^^^ + +Some remaining instances of the word "weblink" were renamed to "web link". + +It was a Mayan EDMS anti-pattern to have the resolved web links and smart +links show their template edit and delete buttons. This has been rectified +in this version. + +Missing link icons were added for several apps. Likewise some missing field +help texts were also added. + + +Other +^^^^^ + +The TemplateField field now shows the available variable in the help text +automatically. There is no need to modify the help text anymore. + +The method to add the BaseTransformationTypemetaclass metaclass to the +BaseTransformation class, has been updated again to make it compatible with +Python 2 and Python 3. + + +Removals +-------- + +- Django download views library. + + +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.5 + + 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:`698` 3.3.3 install - ERROR: django-timezone-field 4.0 has requirement django>=2.2, but you'll have django 1.11.26 which is incompatible. +- :gitlab-issue:`699` 3.3.3 - TypeError: can't pickle memoryview objects + + + +.. _PyPI: https://pypi.python.org/pypi/mayan-edms/ diff --git a/docs/releases/3.3.6.txt b/docs/releases/3.3.6.txt new file mode 100644 index 0000000000..e926aa6c35 --- /dev/null +++ b/docs/releases/3.3.6.txt @@ -0,0 +1,271 @@ +Version 3.3.6 +============= + +Released: December XX, 2019 + + +Changes +------- + + +Compressed files +^^^^^^^^^^^^^^^^ + +Zip files only support UTF-8 and CP437 encoding for filenames. This is not +strongly enforce and some software creates zip files with other text +encoding. The ZipArchive class was updated to work with badly encoded +filenames instead of raising an error. + + +Converter +^^^^^^^^^ + +The page count code was updated to work with more versions of PDF files. +A Python 3 incompatibility was also fixed. + + +Documents +^^^^^^^^^ + +The PDF orientation detection was fixed and updated to work with the new +converter layer system. + + +Redis +^^^^^ + +The Redis lock backend initialization was updated to allow it to also work +with Redis versions older than 5.0. + + +Security +^^^^^^^^ + +A fix for a cross site scripting issues was removed by accident during a +version merge at some unknown time. The fix was reapplied and more robust +tests using Selenium added to avoid further regressions. + + +Settings +^^^^^^^^ + +FreeBSD is now also detected and the paths of binaries adjusted for easier +installation. + + +Sources +^^^^^^^ + +A issue that left behind periodic task entries for watch folders after +deleting a document type associated with them was fixed. + +Transaction handling was added to the interval sources base class delete +and save methods. This increases protection against data loss on database +failure. + + +User interface +^^^^^^^^^^^^^^ + +The last update for the user interface planned for series 3.3 is included. +This update makes the list toolbar "stick" to the top of the view when +scrolling. This is the new toolbar that encloses the multi-item action menu +and the pagination controls. + +The usage of the incorrect word "overrided" was updated to "overridden". + +The address used to check for new versions was updated to the new +Python Package Index address. This avoids SSL certificate errors when the old +certificate is reused. + + +Removals +-------- + +- None + + +Upgrading process +----------------- + +#. Stop supervisord:: + + sudo systemctl stop supervisor + + +Upgrading from Mayan EDMS 3.2.x +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +#. Update the Redis configuration: + + Configure Redis to discard data when it runs out of memory, not save its + database, and only keep 2 database: + + .. code-block:: bash + + 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 + + +#. 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.6 + + 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:`494` DOM based Cross Site Scripting +- :gitlab-issue:`651` Uploading compressed documents fail when compressed file contains special character +- :gitlab-issue:`709` Redis lock manager backend - exception on connect +- :gitlab-issue:`713` Unexpected exception while trying to create version for new document - 'Layer' object has no attribute 'add_to_object' +- :gitlab-issue:`715` Deleting a document type removes a watch folder associated with it without removing the check interval +- :gitlab-issue:`717` Check For Updates Failure +- :gitlab-merge:`63` Improve the executables paths on FreeBSD/OpenBSD. +- :gitlab-merge:`64` Fix page count on some PDF files, and fix a Python 3 incompatibility. +- :gitlab-merge:`65` Settings: Display overridden instead of overrided + +.. _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 95% rename from docs/releases/index.rst rename to docs/releases/index.txt index 0b619a9906..cd674a785f 100644 --- a/docs/releases/index.rst +++ b/docs/releases/index.txt @@ -20,6 +20,16 @@ versions of the documentation contain the release notes for any later releases. .. toctree:: :maxdepth: 1 + 3.3.6 + 3.3.5 + 3.3.4 + 3.3.3 + 3.3.2 + 3.3.1 + 3.3 + 3.2.11 + 3.2.10 + 3.2.9 3.2.8 3.2.7 3.2.6 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 new file mode 100644 index 0000000000..571327dec2 --- /dev/null +++ b/docs/utils.py @@ -0,0 +1,73 @@ +from __future__ import unicode_literals + +import shutil + +from pathlib2 import Path +import sphinx_rtd_theme + +from mayan.apps.storage.utils import patch_files + + +def load_env_file(filename='../config.env'): + result = {} + with open(filename) as file_object: + for line in file_object: + if not line.startswith('#'): + key, value = line.strip().split('=') + result[key] = value + + return result + + +def generate_substitutions(dictionary): + result = [] + + for key, value in dictionary.items(): + result.append(('|{}|'.format(key), value)) + + return result + + +def patch_theme_template(app, templates_path): + package_path = Path(sphinx_rtd_theme.__file__) + 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 + ) + + + patch_files( + path=destination_path, replace_list=replace_list + ) diff --git a/mayan/__init__.py b/mayan/__init__.py index 4dffd359e1..534b0d9c1e 100644 --- a/mayan/__init__.py +++ b/mayan/__init__.py @@ -1,9 +1,9 @@ from __future__ import unicode_literals __title__ = 'Mayan EDMS' -__version__ = '3.2.8' -__build__ = 0x030208 -__build_string__ = 'v3.2.8_Tue Oct 1 13:31:40 2019 -0400' +__version__ = '3.3.6' +__build__ = 0x030306 +__build_string__ = 'v3.3.5-32-g52011aca74_Wed Dec 18 22:52:20 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 1c06e0d05e..898c0f8cfe 100644 --- a/mayan/apps/acls/classes.py +++ b/mayan/apps/acls/classes.py @@ -6,35 +6,21 @@ import logging from django.apps import apps from django.utils.encoding import force_text +from mayan.apps.common.utils import get_related_field + logger = logging.getLogger(__name__) 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): @@ -69,7 +55,14 @@ class ModelPermission(object): return results else: - return cls._registry.get(klass, ()) + # Return the permissions for the klass and the models that + # inherit from it. + result = [] + result.extend(cls._registry.get(klass, ())) + for model in cls._inheritances_reverse.get(klass, ()): + result.extend(cls._registry.get(model, ())) + + return result @classmethod def get_for_instance(cls, instance): @@ -95,12 +88,60 @@ 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 @classmethod def register_inheritance(cls, model, related): + model_reverse = get_related_field( + model=model, related_field_name=related + ).related_model + cls._inheritances_reverse.setdefault(model_reverse, []) + 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 7d4202a627..de020f3c15 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 0e9abd9447..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 f6a30b4a7f..4d0a07c9b0 100644 --- a/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/bg/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-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" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,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" @@ -27,50 +28,50 @@ msgstr "Контролни списъци за достъп" #: events.py:12 msgid "ACL created" -msgstr "" +msgstr "Новосъздадени ACL" #: events.py:15 msgid "ACL edited" -msgstr "" +msgstr "Редактирани ACL" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" -msgstr "" +msgstr "Роля" #: links.py:34 msgid "New ACL" -msgstr "" +msgstr "Нов ACL" #: links.py:39 msgid "Delete" -msgstr "" +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 "" +msgstr "Обект \"%s\" не е модел и не може да бъде проверен за достъп" -#: managers.py:236 +#: managers.py:252 #, python-format msgid "Insufficient access for: %s" -msgstr "" +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 "" +msgstr "Роля \"%(role)s\" разрешение за \"%(object)s\"" #: permissions.py:10 msgid "Edit ACLs" @@ -83,70 +84,70 @@ msgstr "Преглед на контролни списъци за достъп" #: serializers.py:26 serializers.py:136 msgid "" "API URL pointing to the list of permissions for this access control list." -msgstr "" +msgstr "API URL посочва списък с разрешения за контролни списъци за достъп" #: serializers.py:59 msgid "" "API URL pointing to a permission in relation to the access control list to " "which it is attached. This URL is different than the canonical workflow URL." -msgstr "" +msgstr "API URL посочва разрешение във връзка с контролен списък на достъп към който е прикачено. Този URL е различен от основния URL на работния поток." #: serializers.py:91 msgid "Primary key of the new permission to grant to the access control list." -msgstr "" +msgstr "Основен ключ на новото разрешение за включване в контролния списък на достъп" #: serializers.py:115 serializers.py:191 #, python-format msgid "No such permission: %s" -msgstr "" +msgstr "Няма такова разрешение: %s" #: serializers.py:130 msgid "" "Comma separated list of permission primary keys to grant to this access " "control list." -msgstr "" +msgstr "Разделен със запетаи списък на основни ключове за разрешение в контролен списък на разрешения" #: serializers.py:142 msgid "Primary keys of the role to which this access control list binds to." -msgstr "" +msgstr "Основни ключове на ролята, към която е свързан този контролен списък на достъп" #: views.py:62 #, python-format msgid "New access control lists for: %s" -msgstr "" +msgstr "Нови контролни списъци на достъп за: %s" #: views.py:100 #, python-format msgid "Delete ACL: %s" -msgstr "" +msgstr "Изтрийте ACL: %s" #: views.py:147 msgid "There are no ACLs for this object" -msgstr "" +msgstr "Няма контролни списъци за достъп за този обект" #: views.py:150 msgid "" "ACL stands for Access Control List and is a precise method to control user " "access to objects in the system." -msgstr "" +msgstr "ACL е съкращение на Контролен Списък на Достъп и е точен метод за контролиране достъпа на потребителите към обектите в системата." #: views.py:154 #, python-format msgid "Access control lists for: %s" -msgstr "" +msgstr "Контролни списъци на достъп за: %s" #: views.py:170 msgid "Granted permissions" -msgstr "" +msgstr "Дадени разрешения" #: views.py:171 msgid "Available permissions" -msgstr "" +msgstr "Налични разрешения" #: views.py:215 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"." -msgstr "" +msgstr "Роля \"%(role)s\" разрешение за \"%(object)s\"" #: views.py:224 msgid "" @@ -154,50 +155,50 @@ msgid "" "to the role and can't be removed from this view. Inherited permissions need " "to be removed from the parent object's ACL or from them role via the Setup " "menu." -msgstr "" +msgstr "Отменени разрешения се наследяват от родителския обект или се дават направо на потребител с определена роля и не могат да бъдат премахнати от този изглед. Наследените разрешения трябва да бъдат премахнати от ACL на родителския обект или от определената роля чрез меню Настройки." -#: workflow_actions.py:26 +#: workflow_actions.py:25 msgid "Object type" -msgstr "" +msgstr "Тип обект" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." -msgstr "" +msgstr "Тип на обекта за който достъпа ще бъде променен" -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" -msgstr "" +msgstr "ID на обекта" -#: workflow_actions.py:38 +#: workflow_actions.py:37 msgid "" "Numeric identifier of the object for which the access will be modified." -msgstr "" +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 "" +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 "" +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 "" +msgstr "Даване достъп към документа" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" -msgstr "" +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 902ccea172..e462b4595c 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 c4a730e4df..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 3e8a34ccce..362d65231a 100644 --- a/mayan/apps/acls/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/cs/LC_MESSAGES/django.po @@ -4,12 +4,13 @@ # # Translators: # Jiri Fait , 2019 +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -20,134 +21,134 @@ msgstr "" #: apps.py:24 links.py:44 msgid "ACLs" -msgstr "" +msgstr "ACLs" #: events.py:8 permissions.py:7 msgid "Access control lists" -msgstr "" +msgstr "Seznam pro řízení přístupu" #: events.py:12 msgid "ACL created" -msgstr "" +msgstr "ACL vytvořen" #: events.py:15 msgid "ACL edited" -msgstr "" +msgstr "ACL upraven" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" -msgstr "" +msgstr "Role" #: links.py:34 msgid "New ACL" -msgstr "" +msgstr "Nový ACL" #: links.py:39 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 "" +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 "" +msgstr "Nedostatečný přístup pro: %s" + +#: models.py:56 +msgid "Access entry" +msgstr "Přístup k záznamu" #: models.py:57 -msgid "Access entry" -msgstr "" - -#: models.py:58 msgid "Access entries" -msgstr "" +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 "" +msgstr "Role „%(role)s“ má oprávnění „%(object)s“" #: permissions.py:10 msgid "Edit ACLs" -msgstr "" +msgstr "Upravit seznamy ACL" #: permissions.py:13 msgid "View ACLs" -msgstr "" +msgstr "Zobrazit seznamy ACL" #: serializers.py:26 serializers.py:136 msgid "" "API URL pointing to the list of permissions for this access control list." -msgstr "" +msgstr "URL API ukazující na seznam oprávnění pro tento seznam řízení přístupu." #: serializers.py:59 msgid "" "API URL pointing to a permission in relation to the access control list to " "which it is attached. This URL is different than the canonical workflow URL." -msgstr "" +msgstr "URL API ukazující na oprávnění ve vztahu k seznamu řízení přístupu, ke kterému je připojeno. Tato adresa URL se liší od kanonické adresy URL pracovního postupu / workflow." #: serializers.py:91 msgid "Primary key of the new permission to grant to the access control list." -msgstr "" +msgstr "Primární klíč nového oprávnění udělit seznamu řízení přístupu." #: serializers.py:115 serializers.py:191 #, python-format msgid "No such permission: %s" -msgstr "" +msgstr "Bez povolení: %s" #: serializers.py:130 msgid "" "Comma separated list of permission primary keys to grant to this access " "control list." -msgstr "" +msgstr "Čárkami oddělený seznam oprávnění primárních klíčů pro udělení tomuto seznamu řízení přístupu." #: serializers.py:142 msgid "Primary keys of the role to which this access control list binds to." -msgstr "" +msgstr "Primární klíče role, ke které se tento seznam řízení přístupu váže." #: views.py:62 #, python-format msgid "New access control lists for: %s" -msgstr "" +msgstr "Nové seznamy řízení přístupu pro: %s" #: views.py:100 #, python-format msgid "Delete ACL: %s" -msgstr "" +msgstr "Odstranit ACL: %s" #: views.py:147 msgid "There are no ACLs for this object" -msgstr "" +msgstr "Pro tento objekt neexistují žádné ACL" #: views.py:150 msgid "" "ACL stands for Access Control List and is a precise method to control user " "access to objects in the system." -msgstr "" +msgstr "ACL je zkratka pro seznam řízení přístupu a je to přesná metoda řízení přístupu uživatelů k objektům v systému." #: views.py:154 #, python-format msgid "Access control lists for: %s" -msgstr "" +msgstr "Seznamy řízení přístupu pro: %s" #: views.py:170 msgid "Granted permissions" -msgstr "" +msgstr "Udělení oprávnění" #: views.py:171 msgid "Available permissions" -msgstr "" +msgstr "Dostupná oprávnění" #: views.py:215 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"." -msgstr "" +msgstr "Role „%(role)s“ má oprávnění „%(object)s“." #: views.py:224 msgid "" @@ -155,50 +156,50 @@ msgid "" "to the role and can't be removed from this view. Inherited permissions need " "to be removed from the parent object's ACL or from them role via the Setup " "menu." -msgstr "" +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 "" +msgstr "Typ objektu" -#: workflow_actions.py:29 +#: workflow_actions.py:28 msgid "Type of the object for which the access will be modified." -msgstr "" +msgstr "Typ objektu, pro který bude přístup upraven." -#: workflow_actions.py:35 +#: workflow_actions.py:34 msgid "Object ID" -msgstr "" +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 "" +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 "" +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 "" +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:59 +msgid "Grant object access" msgstr "" -#: workflow_actions.py:60 -msgid "Grant access" +#: workflow_actions.py:142 +msgid "Revoke object access" msgstr "" -#: workflow_actions.py:143 -msgid "Revoke access" -msgstr "" - -#: workflow_actions.py:175 +#: workflow_actions.py:174 msgid "Grant document access" -msgstr "" +msgstr "Udělte přístup k dokumentům" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" -msgstr "" +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 931583bf19..92fbbd2d85 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 5b6f022568..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 c7119f59d1..b42dcd821f 100644 --- a/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/de_DE/LC_MESSAGES/django.po @@ -5,14 +5,15 @@ # Translators: # Berny , 2015 # Jesaja Everling , 2017 +# Marvin Haschker , 2019 # Mathias Behrle , 2018 # Tobias Paepke , 2016 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -37,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" @@ -49,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\"" @@ -160,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 "" +msgstr "Dokumentzugriff gewähren" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" -msgstr "" +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 2427822150..577b01b697 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 e3a11ebe23..224cb51414 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-09-24 23:06-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 ef9a62e935..87e53d6726 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:51+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 c37ff38d4b..2d897c4141 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 148b9a39cb..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 9ca8d30a4f..59d42d8789 100644 --- a/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/fr/LC_MESSAGES/django.po @@ -6,14 +6,16 @@ # Christophe CHAUVET , 2016-2017 # 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -37,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" @@ -49,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 "" +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\"" @@ -132,7 +134,7 @@ msgstr "Aucun droit pour cet objet" msgid "" "ACL stands for Access Control List and is a precise method to control user " "access to objects in the system." -msgstr "" +msgstr "ACL signifie Access Control List (liste de contrôle d'accès). Il s'agit d'une méthode précise pour contrôler l'accès des utilisateurs aux objets dans le système." #: views.py:154 #, python-format @@ -160,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 "" +msgstr "Accorder l'accès au document" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" -msgstr "" +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 be7a7b9a72..4c5fc6db34 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 fb8e252208..6cf1cbb468 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 ffa418d381..be62abb238 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-08-28 11:33+0000\n" -"Last-Translator: Daniele Bortoluzzi \n" +"POT-Creation-Date: 2019-12-18 00:25-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 2b71a0150d..5ff9336154 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-28 11:16+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 f86ea509a6..456752bdee 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 10b72d89f7..eecf36c4a3 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-23 09:33+0000\n" -"Last-Translator: Tomasz Szymanowicz \n" +"POT-Creation-Date: 2019-12-18 00:25-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 a5ab1b8b9d..f2d9587da3 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 6a390448e7..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 ae5185a5eb..2b2668bc52 100644 --- a/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/pt_BR/LC_MESSAGES/django.po @@ -6,12 +6,13 @@ # Aline Freitas , 2016 # Jadson Ribeiro , 2017 # José Samuel Facundo da Silva , 2018 +# Rodrigo de Almeida Sottomaior Macedo , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -30,13 +31,13 @@ msgstr "Listas de controle de acesso" #: events.py:12 msgid "ACL created" -msgstr "" +msgstr "ACL criada" #: events.py:15 msgid "ACL edited" -msgstr "" +msgstr "ACL editada" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "Papéis" @@ -48,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 "" +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\"" @@ -149,7 +150,7 @@ msgstr "Permissões disponíveis" #: views.py:215 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"." -msgstr "" +msgstr "A função \"%(role)s\" é de permissão para \"%(object)s\"." #: views.py:224 msgid "" @@ -157,50 +158,50 @@ msgid "" "to the role and can't be removed from this view. Inherited permissions need " "to be removed from the parent object's ACL or from them role via the Setup " "menu." -msgstr "" +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 "" +msgstr "Conceder acesso ao documento" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" -msgstr "" +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 1408badffb..e112a633c5 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-18 15:35+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 25f21fa5c0..243be99ba9 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 68fc5ff5d1..4380c4faac 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 9e9e1e5f8e..34703ea426 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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 3ac03a77ae..c5a115b348 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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..aa0508db89 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 ca966bb1fb..10331c07a8 100644 --- a/mayan/apps/acls/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/acls/locale/zh/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Haiyuan Zhang , 2019 # yulin Gong <540538248@qq.com>, 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-0400\n" +"PO-Revision-Date: 2019-12-10 03:15+0000\n" +"Last-Translator: Haiyuan Zhang \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" @@ -28,13 +29,13 @@ msgstr "访问控制列表" #: events.py:12 msgid "ACL created" -msgstr "" +msgstr "ACL已创建" #: events.py:15 msgid "ACL edited" -msgstr "" +msgstr "ACL已编辑" -#: forms.py:15 models.py:49 +#: forms.py:15 models.py:48 msgid "Role" msgstr "角色" @@ -46,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 "" +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 "%(object)s的角色“%(role)s”的权限" @@ -147,7 +148,7 @@ msgstr "可用权限" #: views.py:215 #, python-format msgid "Role \"%(role)s\" permission's for \"%(object)s\"." -msgstr "" +msgstr "为\"%(object)s\"的角色 \"%(role)s\" 权限" #: views.py:224 msgid "" @@ -157,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 "对象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 "" +msgstr "授予文档访问权限" -#: workflow_actions.py:214 +#: workflow_actions.py:213 msgid "Revoke document access" -msgstr "" +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 e338a99109..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 @@ -8,7 +8,7 @@ from ..permissions import permission_acl_edit, permission_acl_view from .mixins import ACLTestMixin -class AccessControlListViewTestCase(ACLTestMixin, GenericViewTestCase): +class AccessControlListViewTestMixin(object): def _request_test_acl_create_get_view(self): return self.get( viewname='acls:acl_create', @@ -17,6 +17,18 @@ class AccessControlListViewTestCase(ACLTestMixin, GenericViewTestCase): } ) + def _request_test_acl_create_post_view(self): + return self.post( + viewname='acls:acl_create', + kwargs=self.test_content_object_view_kwargs, data={ + 'role': self.test_role.pk + } + ) + + +class AccessControlListViewTestCase( + AccessControlListViewTestMixin, ACLTestMixin, GenericViewTestCase +): def test_acl_create_get_view_no_permission(self): self._setup_test_object() @@ -40,14 +52,6 @@ class AccessControlListViewTestCase(ACLTestMixin, GenericViewTestCase): self.assertEqual(AccessControlList.objects.count(), acl_count) - def _request_test_acl_create_post_view(self): - return self.post( - viewname='acls:acl_create', - kwargs=self.test_content_object_view_kwargs, data={ - 'role': self.test_role.pk - } - ) - def test_acl_create_view_post_no_permission(self): self._setup_test_object() 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/apps.py b/mayan/apps/appearance/apps.py index cd345d4acb..742a2d41e5 100644 --- a/mayan/apps/appearance/apps.py +++ b/mayan/apps/appearance/apps.py @@ -4,10 +4,9 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.common.apps import MayanAppConfig -from .dependencies import * # NOQA - class AppearanceApp(MayanAppConfig): + has_tests = True name = 'mayan.apps.appearance' verbose_name = _('Appearance') 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 ebcbaf8e12..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 038e352659..a59f633de9 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -17,7 +17,7 @@ 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:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "" @@ -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:55 msgid "Server error" msgstr "" @@ -159,7 +165,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -196,79 +202,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "نعم" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "ارسال" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 f0218b2f74..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 1937df8463..b4282f013f 100644 --- a/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/bg/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-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" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,69 +18,75 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" -msgstr "" +msgstr "Изглед" #: dependencies.py:10 msgid "Lato font" -msgstr "" +msgstr "Шрифт Lato" #: dependencies.py:14 msgid "Bootstrap" -msgstr "" +msgstr "Bootstrap" #: dependencies.py:18 msgid "Bootswatch" -msgstr "" +msgstr "Bootswatch" #: dependencies.py:32 msgid "Fancybox" -msgstr "" +msgstr "Fancybox" #: dependencies.py:36 msgid "FontAwesome" -msgstr "" +msgstr "FontAwesome" #: dependencies.py:40 msgid "jQuery" -msgstr "" +msgstr "jQuery" #: dependencies.py:43 msgid "JQuery Form" -msgstr "" +msgstr "jQuery формуляр" #: dependencies.py:47 msgid "jQuery Lazy Load" -msgstr "" +msgstr "jQuery мързеливо зареждане" #: dependencies.py:51 msgid "JQuery Match Height" -msgstr "" +msgstr "jQuery съответствие на височина" #: dependencies.py:55 msgid "Select 2" -msgstr "" +msgstr "Избиране 2" #: dependencies.py:59 msgid "Toastr" -msgstr "" +msgstr "Toastr" #: dependencies.py:62 msgid "URI.js" -msgstr "" +msgstr "URI.js" #: settings.py:14 msgid "Maximum number of characters that will be displayed as the view title." -msgstr "" +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 "" +msgstr "Недостатъчни разрешения" #: templates/403.html:11 msgid "You don't have enough permissions for this operation." -msgstr "" +msgstr "Нямате достатъчни разрешения за тази операция." #: templates/404.html:5 templates/404.html:9 msgid "Page not found" @@ -87,21 +94,21 @@ msgstr "Страницата не е намерена" #: templates/404.html:11 msgid "Sorry, but the requested page could not be found." -msgstr "" +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:55 msgid "Server error" -msgstr "" +msgstr "Грешка в сървъра" #: templates/500.html:11 msgid "" "There's been an error. It's been reported to the site administrators via " "e-mail and should be fixed shortly. Thanks for your patience." -msgstr "" +msgstr "Има грешка. Тя е съобщена на администраторите на сайта чрез електронно съобщение и ще бъде отстранена скоро. Благодарим за търпението." #: templates/appearance/about.html:10 msgid "About" -msgstr "" +msgstr "Относно" #: templates/appearance/about.html:77 #, python-format @@ -109,7 +116,7 @@ msgid "" "\n" " %(setting_project_title)s is based on %(project_title)s\n" " " -msgstr "" +msgstr "\n %(setting_project_title)s се основава на%(project_title)s\n " #: templates/appearance/about.html:82 msgid "Version" @@ -118,11 +125,11 @@ msgstr "Версия" #: templates/appearance/about.html:84 #, python-format msgid "Build number: %(build_number)s" -msgstr "" +msgstr "Номер на конструкцията: %(build_number)s" #: templates/appearance/about.html:97 msgid "Released under the license:" -msgstr "" +msgstr "Издаден под лиценз:" #: templates/appearance/about.html:103 #, python-format @@ -130,7 +137,7 @@ msgid "" "\n" " %(project_title)s is a free and open-source software brought to you with by Roberto Rosario and contributors.\n" " " -msgstr "" +msgstr "\n %(project_title)s е безплатен софтуер с отворен код предоставен Ви от Роберто Росарио и сътрудници.\n " #: templates/appearance/about.html:109 #, python-format @@ -138,7 +145,7 @@ msgid "" "\n" " It takes great effort to make %(project_title)s as feature-rich as it is. We need all the help we can get!\n" " " -msgstr "" +msgstr "\n Необходими са големи усилия за да се направи %(project_title)s с толкова много функции както е сега. Необходима ни е цялата помощ, която можем да получим!\n " #: templates/appearance/about.html:115 #, python-format @@ -146,7 +153,7 @@ msgid "" "\n" " If you use %(project_title)s please consider making a donation %(icon_social_paypal)s\n" " " -msgstr "" +msgstr "\n Ако използвате %(project_title)s молим помислете си дали да направите дарение %(icon_social_paypal)s\n " #: templates/appearance/about.html:121 #, python-format @@ -154,14 +161,14 @@ msgid "" "\n" " You can also donate directly to the creator and lead developer. %(icon_social_paypal)s\n" " " -msgstr "" +msgstr "\n Може също да направите дарение направо на създателя и главен разработчик. %(icon_social_paypal)s\n " #: 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.
The book is available on pre-release format at a discounted price for a limited time.\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 "\n Освен с дарения може също така да подкрепите проекта като закупите екземпляр от книгата \"Изследване на Mayan EDMS\" от Роберто Росарио.\n " #: templates/appearance/about.html:133 #, python-format @@ -169,7 +176,7 @@ msgid "" "\n" " The complete list of changes is available via the Release notes %(icon_documentation)s or the short version Changelog %(icon_documentation)s.\n" " " -msgstr "" +msgstr "\n Пълният списък на промените е наличен чрез Бележки към версията %(icon_documentation)s или кратката версия Дневник на промените%(icon_documentation)s.\n " #: templates/appearance/about.html:139 #, python-format @@ -177,7 +184,7 @@ msgid "" "\n" " For questions check the Documentation %(icon_documentation)s or the Wiki %(icon_wiki)s.\n" " " -msgstr "" +msgstr "\n За въпроси проверете Документация %(icon_documentation)s или Уики %(icon_wiki)s.\n " #: templates/appearance/about.html:145 #, python-format @@ -185,7 +192,7 @@ msgid "" "\n" " If you found a bug or have a feature idea, visit the Forum %(icon_forum)s or open a ticket in the Source code repository %(icon_source_code)s.\n" " " -msgstr "" +msgstr "\n Ако намерите бъг или имате идея за прибавка, посетете Форум %(icon_forum)s или направете заявка в Хранилище на изходен код %(icon_source_code)s.\n " #: templates/appearance/about.html:150 #, python-format @@ -194,115 +201,130 @@ msgid "" " Spread the word. Talk to your friends and colleagues about how awesome %(project_title)s is!\n" " Follow us on Twitter %(icon_social_twitter)s, Facebook %(icon_social_facebook)s, or Instagram %(icon_social_instagram)s\n" " " -msgstr "" +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 "" +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:67 msgid "Toggle Dropdown" -msgstr "" +msgstr "Превключване на плаващо меню" + +#: templates/appearance/calculate_form_title.html:10 +msgid "Open main menu" +msgstr "Отворете главното меню" #: templates/appearance/generic_confirm.html:14 msgid "Are you sure?" -msgstr "" +msgstr "Сигурен ли сте?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Да" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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 "" +msgstr "задължително" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Подаване" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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 "Идентификатор" #: templates/appearance/home.html:10 msgid "Dashboard" -msgstr "" +msgstr "Контролно табло" #: templates/appearance/home.html:26 msgid "Getting started" -msgstr "" +msgstr "Начален етап" #: templates/appearance/home.html:29 msgid "Before you can fully use Mayan EDMS you need the following:" -msgstr "" +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:16 +msgid "Select/Deselect all" +msgstr "Изберете / премахнете избора на всички" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "Изберете елементи, за да активирате групови действия. Използвайте Shift + щракване, за да изберете няколко." + +#: templates/appearance/list_toolbar.html:65 +msgid "Bulk actions" +msgstr "Групови действия" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" -msgstr "" +msgstr "Превключване на навигацията" #: templates/appearance/no_results.html:18 msgid "No results" -msgstr "" +msgstr "Няма резултати" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:60 msgid "Close" -msgstr "" +msgstr "Затваряне" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" -msgstr "" +msgstr "Грешка при свързването със сървъра" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 msgid "Check you network connection and try again in a few moments." -msgstr "" +msgstr "Проверете връзката с мрежата и опитайте отново след няколко секунди." #: templatetags/appearance_tags.py:17 msgid "None" 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 cc7f003c47..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 e8f6160fad..92696c71a4 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -18,7 +18,7 @@ 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:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Izgled" @@ -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:55 msgid "Server error" msgstr "Greška u serveru" @@ -160,7 +166,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -197,79 +203,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Da" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Podnijeti" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "Zatvori" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Problem u komunikaciji sa serverom" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 4037bda791..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 52d45ff124..2972f20d69 100644 --- a/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/cs/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -17,91 +18,97 @@ 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:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" -msgstr "" +msgstr "Vzhled" #: dependencies.py:10 msgid "Lato font" -msgstr "" +msgstr "Lato písmo" #: dependencies.py:14 msgid "Bootstrap" -msgstr "" +msgstr "Bootstrap" #: dependencies.py:18 msgid "Bootswatch" -msgstr "" +msgstr "Bootswatch" #: dependencies.py:32 msgid "Fancybox" -msgstr "" +msgstr "Fancybox" #: dependencies.py:36 msgid "FontAwesome" -msgstr "" +msgstr "FontAwesome" #: dependencies.py:40 msgid "jQuery" -msgstr "" +msgstr "jQuery" #: dependencies.py:43 msgid "JQuery Form" -msgstr "" +msgstr "Formulář JQuery" #: dependencies.py:47 msgid "jQuery Lazy Load" -msgstr "" +msgstr "jQuery spožděné načítání" #: dependencies.py:51 msgid "JQuery Match Height" -msgstr "" +msgstr "JQuery Match Height" #: dependencies.py:55 msgid "Select 2" -msgstr "" +msgstr "Select 2" #: dependencies.py:59 msgid "Toastr" -msgstr "" +msgstr "Toastr" #: dependencies.py:62 msgid "URI.js" -msgstr "" +msgstr "URI.js" #: settings.py:14 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 "" +msgstr "Nedostatečná oprávnění" #: templates/403.html:11 msgid "You don't have enough permissions for this operation." -msgstr "" +msgstr "Pro tuto operaci nemáte dostatečná oprávnění." #: templates/404.html:5 templates/404.html:9 msgid "Page not found" -msgstr "" +msgstr "Stránka nenalezena" #: templates/404.html:11 msgid "Sorry, but the requested page could not be found." -msgstr "" +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:55 msgid "Server error" -msgstr "" +msgstr "Chyba serveru" #: templates/500.html:11 msgid "" "There's been an error. It's been reported to the site administrators via " "e-mail and should be fixed shortly. Thanks for your patience." -msgstr "" +msgstr "Došlo k chybě. Bylo to hlášeno správcům webu prostřednictvím e-mailu a mělo by být brzy opraveno. Děkuji za Vaši trpělivost." #: templates/appearance/about.html:10 msgid "About" -msgstr "" +msgstr "O" #: templates/appearance/about.html:77 #, python-format @@ -109,20 +116,20 @@ msgid "" "\n" " %(setting_project_title)s is based on %(project_title)s\n" " " -msgstr "" +msgstr "\n%(setting_project_title)s je založen na %(project_title)s" #: templates/appearance/about.html:82 msgid "Version" -msgstr "" +msgstr "Verze" #: templates/appearance/about.html:84 #, python-format msgid "Build number: %(build_number)s" -msgstr "" +msgstr "Číslo sestavy: %(build_number)s" #: templates/appearance/about.html:97 msgid "Released under the license:" -msgstr "" +msgstr "Vydáno na základě licence:" #: templates/appearance/about.html:103 #, python-format @@ -130,7 +137,7 @@ msgid "" "\n" " %(project_title)s is a free and open-source software brought to you with by Roberto Rosario and contributors.\n" " " -msgstr "" +msgstr "\n%(project_title)s je bezplatný a open-source software, který vám přináší Roberto Rosario a přispěvatelé." #: templates/appearance/about.html:109 #, python-format @@ -138,7 +145,7 @@ msgid "" "\n" " It takes great effort to make %(project_title)s as feature-rich as it is. We need all the help we can get!\n" " " -msgstr "" +msgstr "\nVynakládá velké úsilí, aby byl %(project_title)s stejně bohatý na funkce. Potřebujeme veškerou pomoc, kterou můžeme získat!" #: templates/appearance/about.html:115 #, python-format @@ -146,7 +153,7 @@ msgid "" "\n" " If you use %(project_title)s please consider making a donation %(icon_social_paypal)s\n" " " -msgstr "" +msgstr "\nPokud používáte %(project_title)s, zvažte prosím darování %(icon_social_paypal)s" #: templates/appearance/about.html:121 #, python-format @@ -154,12 +161,12 @@ msgid "" "\n" " You can also donate directly to the creator and lead developer. %(icon_social_paypal)s\n" " " -msgstr "" +msgstr "\nMůžete také přispět přímo tvůrci a hlavnímu vývojáři. %(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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -169,7 +176,7 @@ msgid "" "\n" " The complete list of changes is available via the Release notes %(icon_documentation)s or the short version Changelog %(icon_documentation)s.\n" " " -msgstr "" +msgstr "\nÚplný seznam změn je k dispozici v poznámkách k vydání %(icon_documentation)s nebo v krátké verzi Changelog %(icon_documentation)s ." #: templates/appearance/about.html:139 #, python-format @@ -177,7 +184,7 @@ msgid "" "\n" " For questions check the Documentation %(icon_documentation)s or the Wiki %(icon_wiki)s.\n" " " -msgstr "" +msgstr "\nV případě dotazů zkontrolujte dokumentaci %(icon_documentation)s nebo Wiki %(icon_wiki)s ." #: templates/appearance/about.html:145 #, python-format @@ -185,7 +192,7 @@ msgid "" "\n" " If you found a bug or have a feature idea, visit the Forum %(icon_forum)s or open a ticket in the Source code repository %(icon_source_code)s.\n" " " -msgstr "" +msgstr "\nPokud jste našli chybu nebo máte nějaký nápad, navštivte fórum %(icon_forum)s nebo otevřete lístek v úložišti zdrojových kódů %(icon_source_code)s ." #: templates/appearance/about.html:150 #, python-format @@ -194,116 +201,131 @@ msgid "" " Spread the word. Talk to your friends and colleagues about how awesome %(project_title)s is!\n" " Follow us on Twitter %(icon_social_twitter)s, Facebook %(icon_social_facebook)s, or Instagram %(icon_social_instagram)s\n" " " -msgstr "" +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 "" +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." +"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 "" +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:67 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 "" - -#: templates/appearance/generic_confirm.html:34 -msgid "Yes" -msgstr "" +msgstr "Jsi si jistí?" #: templates/appearance/generic_confirm.html:38 +msgid "Yes" +msgstr "Ano" + +#: templates/appearance/generic_confirm.html:48 msgid "No" -msgstr "" +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 "" +msgstr "Požadované" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Save" -msgstr "" +msgstr "Uložit" -#: templates/appearance/generic_form_subtemplate.html:86 -#: templates/appearance/generic_form_subtemplate.html:99 +#: templates/appearance/generic_form_subtemplate.html:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" -msgstr "" +msgstr "Odeslat" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: templates/appearance/generic_multiform_subtemplate.html:63 msgid "Cancel" -msgstr "" +msgstr "Zrušit" -#: templates/appearance/generic_list_items_subtemplate.html:17 -#: templates/appearance/generic_list_subtemplate.html:17 +#: templates/appearance/generic_list_subtemplate.html:28 +msgid "Identifier" +msgstr "Identifikátor" + +#: templates/appearance/home.html:10 +msgid "Dashboard" +msgstr "Řídící panel" + +#: templates/appearance/home.html:26 +msgid "Getting started" +msgstr "Začínáme" + +#: templates/appearance/home.html:29 +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/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 "" +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 +#: 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:16 +msgid "Select/Deselect all" msgstr "" -#: templates/appearance/generic_list_subtemplate.html:55 -msgid "Identifier" +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." msgstr "" -#: templates/appearance/home.html:10 -msgid "Dashboard" +#: templates/appearance/list_toolbar.html:65 +msgid "Bulk actions" msgstr "" -#: templates/appearance/home.html:26 -msgid "Getting started" -msgstr "" - -#: templates/appearance/home.html:29 -msgid "Before you can fully use Mayan EDMS you need the following:" -msgstr "" - -#: templates/appearance/main_menu.html:10 +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" -msgstr "" +msgstr "Přepnout navigaci" #: templates/appearance/no_results.html:18 msgid "No results" -msgstr "" +msgstr "Žádné výsledky" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:60 msgid "Close" -msgstr "" +msgstr "Zavřít" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" -msgstr "" +msgstr "Chyba komunikace se serverem" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 msgid "Check you network connection and try again in a few moments." -msgstr "" +msgstr "Zkontrolujte připojení k síti a zkuste to znovu za chvíli." #: templatetags/appearance_tags.py:17 msgid "None" -msgstr "" +msgstr "žádný" 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 be15825fef..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 6b131aad45..3b758255d8 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -18,7 +18,7 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "" @@ -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:55 msgid "Server error" msgstr "Server fejl" @@ -160,7 +166,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -197,79 +203,68 @@ 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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Ja" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Indsend" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "Luk" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 8a499819c2..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 a76417fe74..3d27c4c2d1 100644 --- a/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/de_DE/LC_MESSAGES/django.po @@ -6,13 +6,14 @@ # Berny , 2015 # Bjoern Kowarsch , 2018 # Jesaja Everling , 2017 +# Marvin Haschker , 2019 # Mathias Behrle , 2018 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,13 +22,13 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Erscheinungsbild" #: dependencies.py:10 msgid "Lato font" -msgstr "" +msgstr "Lato-Schriftart" #: dependencies.py:14 msgid "Bootstrap" @@ -77,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" @@ -93,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:55 msgid "Server error" msgstr "Serverfehler" @@ -158,14 +165,14 @@ msgid "" "\n" " You can also donate directly to the creator and lead developer. %(icon_social_paypal)s\n" " " -msgstr "" +msgstr "\nSie können auch direkt an den Ersteller und leitenden Entwickler spenden. %(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.
The book is available on pre-release format at a discounted price for a limited time.\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 "\nNeben Spenden können Sie das Projekt auch unterstützen, indem Sie ein Exemplar des Buches \"Exploring Mayan EDMS\" von Roberto Rosario erwerben ." #: templates/appearance/about.html:133 #, python-format @@ -200,79 +207,68 @@ 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." +"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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Ja" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Absenden" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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" @@ -288,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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "Navigation ein-/ausschalten" @@ -296,15 +318,15 @@ msgstr "Navigation ein-/ausschalten" msgid "No results" msgstr "Kein Ergebnis" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:60 msgid "Close" msgstr "Schließen" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Fehler bei der Verbindung zum Server" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 a9e1a55da8..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 c574c4dcf9..88a4145382 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -17,7 +17,7 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Παρουσιαστικό" @@ -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:55 msgid "Server error" msgstr "Σφάλμα διακομηστή" @@ -159,7 +165,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -196,79 +202,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Ναι" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Υποβολή" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 b750a6150d..a66810c049 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-09-24 23:06-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "" @@ -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:55 msgid "Server error" msgstr "" @@ -169,8 +175,7 @@ msgid "" "\n" " Besides donations you can also support the project by purchasing a copy " -"of the book \"Exploring Mayan EDMS\" by Roberto Rosario.
The book is " -"available on pre-release format at a discounted price for a limited time.\n" +"of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -223,79 +228,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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 "" @@ -311,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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "" @@ -319,15 +339,15 @@ msgstr "" msgid "No results" msgstr "" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 cf4cdd5555..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 49faeb8a26..cfd7906059 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-24 21:04+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -18,7 +18,7 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Apariencia" @@ -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:55 msgid "Server error" msgstr "Error de servidor" @@ -160,9 +166,9 @@ msgstr "\nTambién puede purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " -msgstr "\nAdemás de las donaciones, también puede apoyar el proyecto comprando una copia del libro \"Exploring Mayan EDMS\" de Roberto Rosario .
El libro está disponible en formato de prelanzamiento a un precio con descuento por tiempo limitado." +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,79 +203,68 @@ 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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Sí" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Enviar" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "Seleccionar / Deseleccionar todo" + +#: templates/appearance/list_toolbar.html:60 +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:65 +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:60 msgid "Close" msgstr "Cerrar" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Error de comunicación del servidor" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 1bbb93652d..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 45ea3ab8d6..5e560ddfa2 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -18,7 +18,7 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "ظاهر" @@ -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:55 msgid "Server error" msgstr "خطای سرور" @@ -160,7 +166,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -197,79 +203,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "بلی" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "ارسال" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 5397d5d816..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 df8b3c3c3a..9f1a979d9c 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -23,7 +24,7 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Apparence" @@ -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:55 msgid "Server error" msgstr "Erreur du serveur" @@ -160,14 +167,14 @@ msgid "" "\n" " You can also donate directly to the creator and lead developer. %(icon_social_paypal)s\n" " " -msgstr "" +msgstr "\nVous pouvez également faire un don directement au créateur et développeur principal. %(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.
The book is available on pre-release format at a discounted price for a limited time.\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 "\nOutre les dons, vous pouvez également soutenir le projet en achetant un exemplaire du livre \"Exploring Mayan EDMS\" de Roberto Rosario ." #: templates/appearance/about.html:133 #, python-format @@ -202,79 +209,68 @@ 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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Oui" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Soumettre" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "Tout sélectionner/Désélectionner" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "Fermer" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Erreur de communication serveur" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 0479ef6d18..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 31f558bae1..6901caac48 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -18,7 +18,7 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Kinézet" @@ -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:55 msgid "Server error" msgstr "" @@ -160,7 +166,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -197,79 +203,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Igen" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 cd77d66265..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 ddd8d9d300..6aeef50f07 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -17,7 +17,7 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "" @@ -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:55 msgid "Server error" msgstr "" @@ -159,7 +165,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -196,79 +202,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Ya" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 65d588cd20..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 3cda5a35b9..849cba1273 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -20,7 +20,7 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Aspetto" @@ -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:55 msgid "Server error" msgstr "Errore del server" @@ -162,7 +168,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -199,79 +205,68 @@ 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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Si" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Conferma" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "Chiudi" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Errore di comunicazione del Server" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 33dfce8613..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 1f84ae16fc..4c994915b2 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -18,7 +18,7 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Izskats" @@ -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:55 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.
The book is available on pre-release format at a discounted price for a limited time.\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,79 +203,68 @@ 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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Jā" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Iesniegt" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "Atlasīt / noņemt atlasi visiem" + +#: templates/appearance/list_toolbar.html:60 +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:65 +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:60 msgid "Close" msgstr "Aizvērt" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Servera sakaru kļūda" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 b0f878134a..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 7b3cf9af05..9078d2b6fd 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -20,7 +20,7 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Uiterlijk" @@ -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:55 msgid "Server error" msgstr "Server fout" @@ -162,7 +168,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -199,79 +205,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Ja" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Verstuur" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "Sluiten" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Server communicatie probleem" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 c4897cbea4..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 51c1edc7b3..d2518b7ca0 100644 --- a/mayan/apps/appearance/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-23 09:49+0000\n" -"Last-Translator: Tomasz Szymanowicz \n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -22,7 +22,7 @@ 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:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Wygląd" @@ -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:55 msgid "Server error" msgstr "Błąd serwera" @@ -164,9 +170,9 @@ msgstr "\nMożesz także purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " -msgstr "\nOprócz darowizn możesz również wesprzeć projekt kupując książkę „Exploring Mayan EDMS” autorstwa Roberto Rosario .
Książka jest dostępna w formacie przedpremierowym po obniżonej cenie przez ograniczony czas." +msgstr "" #: templates/appearance/about.html:133 #, python-format @@ -201,79 +207,68 @@ 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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Tak" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Wykonaj" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "Zamknij" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Błąd komunikacji z serwerem" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 dc0e45e4fa..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 3ccaccf6b4..907821b4da 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -17,7 +17,7 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "" @@ -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:55 msgid "Server error" msgstr "" @@ -159,7 +165,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -196,79 +202,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Sim" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Submeter" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 290ffdaab4..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 eccfbab33c..11f5305688 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -20,7 +20,7 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Aparência" @@ -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:55 msgid "Server error" msgstr "Erro de servidor" @@ -162,7 +168,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -199,79 +205,68 @@ 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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Sim" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Enviar" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "Fechar" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Erro na comunicação com o servidor" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 5516979606..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 e79f522886..652435b98e 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-21 05:30+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -19,7 +19,7 @@ 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:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Aspect" @@ -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:55 msgid "Server error" msgstr "Eroare la server" @@ -161,9 +167,9 @@ msgstr "\nPuteți purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " -msgstr "\nPe lângă donații, puteți susține și proiectul achiziționând o copie a cărții „Exploring Mayan EDMS” de Roberto Rosario .
Cartea este disponibilă în format pre-lansare la un preț redus pentru o perioadă limitată de timp.\n " +msgstr "\nPe lângă donații, puteți susține proiectul achiziționând o copie a cărții „Exploring Mayan EDMS” de Roberto Rosario ." #: templates/appearance/about.html:133 #, python-format @@ -198,79 +204,68 @@ 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:67 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?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Da" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "Selectați / Deselectați toate" + +#: templates/appearance/list_toolbar.html:60 +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:65 +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:60 msgid "Close" msgstr "Închide" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Eroare de comunicare cu server-ul" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 0ae43a9bf2..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 2311053621..35d626e9bf 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -19,7 +19,7 @@ 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:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Внешний вид" @@ -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:55 msgid "Server error" msgstr "Ошибка сервера" @@ -161,7 +167,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -198,79 +204,68 @@ 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:67 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 "Вы уверены?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Да" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "Подтвердить" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "Закрыть" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "Ошибка соединения с сервером" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 f70e89f8f0..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 fb6537b410..e018754b9d 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -18,7 +18,7 @@ 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:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Videz" @@ -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:55 msgid "Server error" msgstr "Napaka strežnika" @@ -160,7 +166,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -197,79 +203,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Da" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 10e5b528f2..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 856e23cbfe..cab8d35ff7 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -19,7 +19,7 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "Görünüm" @@ -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:55 msgid "Server error" msgstr "Server hatası" @@ -161,7 +167,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -198,79 +204,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "Evet" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 2cf715585d..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 48a2b9b490..3125282e3f 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-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -17,7 +17,7 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "" @@ -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:55 msgid "Server error" msgstr "" @@ -159,7 +165,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -196,79 +202,68 @@ 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:67 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 "" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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:16 +msgid "Select/Deselect all" +msgstr "" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +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:60 msgid "Close" msgstr "" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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 313dd0bd5d..bca0699a04 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 fee8ef50ab..2d2e1ea56e 100644 --- a/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/appearance/locale/zh/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Haiyuan Zhang , 2019 # yulin Gong <540538248@qq.com>, 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:06-0400\n" -"PO-Revision-Date: 2019-09-04 03:25+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-0400\n" +"PO-Revision-Date: 2019-12-12 14:13+0000\n" +"Last-Translator: Haiyuan Zhang \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,13 +19,13 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:12 settings.py:9 +#: apps.py:11 settings.py:9 msgid "Appearance" msgstr "外观" #: dependencies.py:10 msgid "Lato font" -msgstr "" +msgstr "Lato字体" #: dependencies.py:14 msgid "Bootstrap" @@ -74,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 "权限不足" @@ -90,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:55 msgid "Server error" msgstr "服务器错误" @@ -160,7 +167,7 @@ msgstr "" #: 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.
The book is available on pre-release format at a discounted price for a limited time.\n" +" Besides donations you can also support the project by purchasing a copy of the book \"Exploring Mayan EDMS\" by Roberto Rosario.\n" " " msgstr "" @@ -197,79 +204,68 @@ 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:67 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 "你确定吗?" -#: templates/appearance/generic_confirm.html:34 +#: templates/appearance/generic_confirm.html:38 msgid "Yes" msgstr "是" -#: templates/appearance/generic_confirm.html:38 +#: templates/appearance/generic_confirm.html:48 msgid "No" 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: 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:83 +#: templates/appearance/generic_form_subtemplate.html:96 #: templates/appearance/generic_multiform_subtemplate.html:59 msgid "Submit" msgstr "提交" -#: templates/appearance/generic_form_subtemplate.html:90 +#: templates/appearance/generic_form_subtemplate.html:87 #: 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 +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:16 +msgid "Select/Deselect all" +msgstr "全选/全不选" + +#: templates/appearance/list_toolbar.html:60 +msgid "" +"Select items to activate bulk actions. Use Shift + click to select many." +msgstr "" + +#: templates/appearance/list_toolbar.html:65 +msgid "Bulk actions" +msgstr "" + +#: templates/appearance/menu_topbar.html:11 msgid "Toggle navigation" msgstr "切换导航" @@ -293,15 +315,15 @@ msgstr "切换导航" msgid "No results" msgstr "没有结果" -#: templates/appearance/root.html:57 +#: templates/appearance/root.html:60 msgid "Close" msgstr "关闭" -#: templates/appearance/root.html:65 +#: templates/appearance/root.html:68 msgid "Server communication error" msgstr "服务器通信错误" -#: templates/appearance/root.html:67 +#: templates/appearance/root.html:70 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..e02bd83a2e 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,14 @@ a i { padding: 0px; padding-bottom: 10px; /* Padding for scrollbar */ } + +/* appearance - JavaScript server error */ +.banner-server-error { + margin-top: 10px; +} + +/* List toolbar affix */ +#list-toolbar.affix { + top: 60px; /* OuterHeight of navbar */ + z-index: 90; +} 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..06a51de56c 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'); }); @@ -268,6 +277,53 @@ class MayanApp { }) } + setupListToolbar () { + var $listToolbar = $('#list-toolbar'); + + if ($listToolbar.length !== 0) { + var $listToolbarClearfix = $listToolbar.closest('.clearfix'); + var $listToolbarSpacer = $('#list-toolbar-spacer'); + var navBarOuterHeight = $('.navbar-fixed-top').outerHeight(); + + $listToolbarSpacer.height($listToolbarClearfix.height()).hide(); + + $listToolbar.css( + { + width: $listToolbarClearfix.width(), + } + ); + + $listToolbar.affix({ + offset: { + top: $listToolbar.offset().top - navBarOuterHeight, + }, + }); + + $listToolbar.on('affix.bs.affix', function () { + $listToolbarSpacer.show(); + + $listToolbar.css( + { + width: $listToolbarClearfix.width(), + } + ); + }); + + + $listToolbar.on('affix-top.bs.affix', function () { + $listToolbarSpacer.hide(); + }); + + this.window.on('resize', function () { + $listToolbar.css( + { + width: $listToolbarClearfix.width(), + } + ); + }); + } + } + setupNavbarCollapse () { $(document).keyup(function(e) { if (e.keyCode === 27) { @@ -280,6 +336,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 +358,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 183955fc3f..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 %} @@ -125,7 +125,7 @@

{% blocktrans with icon_social_paypal as icon_social_paypal%} - Besides donations you can also support the project by purchasing a copy of the book "Exploring Mayan EDMS" by Roberto Rosario.
The book is available on pre-release format at a discounted price for a limited time. + Besides donations you can also support the project by purchasing a copy of the book "Exploring Mayan EDMS" by Roberto Rosario. {% endblocktrans %}

@@ -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/forms/widgets/textareadiv.html b/mayan/apps/appearance/templates/appearance/forms/widgets/textareadiv.html index 0886f0c8ca..88e54185f4 100644 --- a/mayan/apps/appearance/templates/appearance/forms/widgets/textareadiv.html +++ b/mayan/apps/appearance/templates/appearance/forms/widgets/textareadiv.html @@ -1,2 +1,2 @@ -
+
 {% if widget.value %}{{ widget.value }}{% endif %}
diff --git a/mayan/apps/appearance/templates/appearance/generic_confirm.html b/mayan/apps/appearance/templates/appearance/generic_confirm.html index 20a3956ee4..51aa385a60 100644 --- a/mayan/apps/appearance/templates/appearance/generic_confirm.html +++ b/mayan/apps/appearance/templates/appearance/generic_confirm.html @@ -30,12 +30,22 @@ {% endif %} {% if previous %} - {{ cancel_icon_class.render }} {% trans 'No' %} + + {% if cancel_icon_class %} + {{ cancel_icon_class.render }} + {% else %} + + {% endif %} + {% trans 'No' %} {% endif %} diff --git a/mayan/apps/appearance/templates/appearance/generic_form.html b/mayan/apps/appearance/templates/appearance/generic_form.html index 66086009ee..5796818eba 100644 --- a/mayan/apps/appearance/templates/appearance/generic_form.html +++ b/mayan/apps/appearance/templates/appearance/generic_form.html @@ -6,7 +6,7 @@ {% block content %} {% if form %} {% with '' as title %} - {% include "appearance/generic_form_subtemplate.html" %} + {% include 'appearance/generic_form_subtemplate.html' %} {% endwith %} {% endif %} @@ -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..1242004270 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 %} @@ -53,7 +53,7 @@ {% if field|widget_type == 'checkboxinput' %}
@@ -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..2ab60e6e7a 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 %} @@ -78,12 +77,10 @@ {% 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..0ca85ac7f7 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..cf86de31f4 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/generic_multiform_subtemplate.html b/mayan/apps/appearance/templates/appearance/generic_multiform_subtemplate.html index d5ebac6d14..69fa9eb43c 100644 --- a/mayan/apps/appearance/templates/appearance/generic_multiform_subtemplate.html +++ b/mayan/apps/appearance/templates/appearance/generic_multiform_subtemplate.html @@ -56,11 +56,11 @@
{% if not form_disable_submit %} - + {% endif %} {% if previous %}   - {% if cancel_label %}{{ cancel_label }}{% else %}{% trans 'Cancel' %}{% endif %} + {% if cancel_label %}{{ cancel_label }}{% else %}{% trans 'Cancel' %}{% endif %} {% 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..d20ef50f0e --- /dev/null +++ b/mayan/apps/appearance/templates/appearance/list_toolbar.html @@ -0,0 +1,95 @@ +{% load i18n %} + +{% load common_tags %} +{% load navigation_tags %} + +{% 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..6e7f15b1df 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,25 +105,32 @@ 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(); app.setupScrollView(); + app.setupListToolbar(); } jQuery(document).ready(function() { 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/appearance/tests/__init__.py b/mayan/apps/appearance/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/appearance/tests/test_views.py b/mayan/apps/appearance/tests/test_views.py new file mode 100644 index 0000000000..cd169a998d --- /dev/null +++ b/mayan/apps/appearance/tests/test_views.py @@ -0,0 +1,47 @@ +from __future__ import absolute_import, unicode_literals + +from selenium.common.exceptions import NoAlertPresentException +from selenium.webdriver.firefox.webdriver import WebDriver + +from django.conf import settings +from django.contrib.staticfiles.testing import StaticLiveServerTestCase +from django.urls import reverse + +from mayan.apps.common.tests.base import GenericViewTestCase + + +class BasePlainViewTestCase(GenericViewTestCase, StaticLiveServerTestCase): + auto_add_test_view = True + test_view_url = r'^javascript:alert\("XSS"\)/$' + test_view_is_public = True + test_view_template = 'javascript_view' + + @classmethod + def setUpClass(cls): + super(BasePlainViewTestCase, cls).setUpClass() + cls.selenium = WebDriver(log_path='/dev/null') + + @classmethod + def tearDownClass(cls): + cls.selenium.quit() + super(BasePlainViewTestCase, cls).tearDownClass() + + def test_login_view_url_fragment_xss(self): + # Should redirect and not display an alert + url = '{}{}{}'.format( + self.live_server_url, reverse(viewname=settings.LOGIN_URL), + '#javascript:alert("XSS")' + ) + self.selenium.get(url=url) + + with self.assertRaises(NoAlertPresentException): + self.selenium.switch_to_alert() + + def test_login_view_url_redirect(self): + url = '{}{}{}'.format( + self.live_server_url, reverse(viewname=settings.LOGIN_URL), + '#javascript:alert("XSS")' + ) + self.selenium.get(url=url) + + self.assertTrue(self.test_view_template in self.selenium.page_source) diff --git a/mayan/apps/authentication/locale/ar/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/ar/LC_MESSAGES/django.po index 99847ba5bf..29218ab268 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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.mo b/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.mo index 8953d69381..e84c33625f 100644 Binary files a/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.po index 2956045965..25e8613c8b 100644 --- a/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/bg/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +20,7 @@ msgstr "" #: apps.py:25 settings.py:9 msgid "Authentication" -msgstr "" +msgstr "Удостоверяване" #: forms.py:17 msgid "Email" @@ -27,21 +28,21 @@ msgstr "Електронна поща" #: forms.py:20 msgid "Password" -msgstr "" +msgstr "Парола" #: forms.py:22 forms.py:73 msgid "Remember me" -msgstr "" +msgstr "Запомни ме" #: forms.py:25 msgid "" "Please enter a correct email and password. Note that the password field is " "case-sensitive." -msgstr "" +msgstr "Моля въведете правилна електронна поща и парола. Забележете, че полето за паролата е чувствително за главни/малки букви." #: forms.py:27 msgid "This account is inactive." -msgstr "" +msgstr "Този акаунт е неактивен." #: links.py:22 msgid "Logout" @@ -49,23 +50,23 @@ msgstr "Изход" #: links.py:27 msgid "Change password" -msgstr "" +msgstr "Промяна на парола" #: links.py:32 links.py:39 msgid "Set password" -msgstr "" +msgstr "Задаване на парола" #: settings.py:13 msgid "" "Controls the mechanism used to authenticated user. Options are: username, " "email" -msgstr "" +msgstr "Управлява механизма, използван за удостоверяване на потребителя. Опциите са: потребителско име, имейл" #: settings.py:20 msgid "" "Maximum time a user clicking the \"Remember me\" checkbox will remain logged" " in. Value is time in seconds." -msgstr "" +msgstr "Максимално време, за което потребителят натискащ квадратчето „Запомни ме“ ще остане включен. Стойността е време в секунди." #: templates/authentication/login.html:11 msgid "Login" @@ -74,11 +75,11 @@ msgstr "Влез" #: templates/authentication/login.html:26 #: templates/authentication/login.html:34 msgid "Sign in" -msgstr "" +msgstr "Впиши се" #: templates/authentication/login.html:39 msgid "Forgot your password?" -msgstr "" +msgstr "Забравена парола?" #: templates/authentication/password_reset_complete.html:8 #: templates/authentication/password_reset_confirm.html:8 @@ -87,15 +88,15 @@ msgstr "" #: templates/authentication/password_reset_form.html:8 #: templates/authentication/password_reset_form.html:20 msgid "Password reset" -msgstr "" +msgstr "Нулиране на парола" #: templates/authentication/password_reset_complete.html:15 msgid "Password reset complete! Click the link below to login." -msgstr "" +msgstr "Нулирането на паролата завърши! Кликнете върху връзката по-долу, за да влезете." #: templates/authentication/password_reset_complete.html:17 msgid "Login page" -msgstr "" +msgstr "Страница за вход" #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 views.py:154 @@ -104,7 +105,7 @@ msgstr "Подаване" #: templates/authentication/password_reset_done.html:15 msgid "Password reset email sent!" -msgstr "" +msgstr "Изпратен имейл за нулиране на парола!" #: views.py:74 msgid "Your password has been successfully changed." @@ -116,28 +117,28 @@ msgstr "Промяна паролата на текущия потребител #: views.py:89 msgid "Changing the password is not allowed for this account." -msgstr "" +msgstr "Промяната на паролата не е разрешена за този акаунт." #: views.py:145 #, python-format msgid "Password change request performed on %(count)d user" -msgstr "" +msgstr "Заявка за промяна на парола, изпълнена за%(count)d потребител" #: views.py:147 #, python-format msgid "Password change request performed on %(count)d users" -msgstr "" +msgstr "Заявка за промяна на парола, изпълнена за %(count)d потребител" #: views.py:156 msgid "Change user password" msgid_plural "Change users passwords" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Промяна на паролата на потребителя" +msgstr[1] "Промяна на паролите на потребителите" #: views.py:166 #, python-format msgid "Change password for user: %s" -msgstr "" +msgstr "Промяна на паролата за потребителя: %s" #: views.py:186 msgid "" @@ -148,7 +149,7 @@ msgstr "Промяна на парола на потребители от суп #: views.py:196 #, python-format msgid "Successful password reset for user: %s." -msgstr "" +msgstr "Успешно нулиране на паролата за потребителя: %s." #: views.py:202 #, python-format 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 328be09d8c..e362bb0d03 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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.mo b/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.mo index 6cce7bf094..c6b53d504f 100644 Binary files a/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.po index fa69326b49..f24c5b88ed 100644 --- a/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/cs/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,66 +20,66 @@ msgstr "" #: apps.py:25 settings.py:9 msgid "Authentication" -msgstr "" +msgstr "Ověřování" #: forms.py:17 msgid "Email" -msgstr "" +msgstr "E-mail" #: forms.py:20 msgid "Password" -msgstr "" +msgstr "Heslo" #: forms.py:22 forms.py:73 msgid "Remember me" -msgstr "" +msgstr "Zapamatuj si mě" #: forms.py:25 msgid "" "Please enter a correct email and password. Note that the password field is " "case-sensitive." -msgstr "" +msgstr "Zadejte správný e-mail a heslo. Upozorňujeme, že v poli hesla se rozlišují malá a velká písmena." #: forms.py:27 msgid "This account is inactive." -msgstr "" +msgstr "Tento účet je neaktivní." #: links.py:22 msgid "Logout" -msgstr "" +msgstr "Odhlásit se" #: links.py:27 msgid "Change password" -msgstr "" +msgstr "Změnit heslo" #: links.py:32 links.py:39 msgid "Set password" -msgstr "" +msgstr "Nastavit heslo" #: settings.py:13 msgid "" "Controls the mechanism used to authenticated user. Options are: username, " "email" -msgstr "" +msgstr "Řídí mechanismus používaný k ověření uživatele. Možnosti jsou: uživatelské jméno, e-mail" #: settings.py:20 msgid "" "Maximum time a user clicking the \"Remember me\" checkbox will remain logged" " in. Value is time in seconds." -msgstr "" +msgstr "Maximální doba, po kterou uživatel klepnutím na políčko „Zapamatovat si mě“ zůstane přihlášený. Hodnota je čas v sekundách." #: templates/authentication/login.html:11 msgid "Login" -msgstr "" +msgstr "Přihlásit se" #: templates/authentication/login.html:26 #: templates/authentication/login.html:34 msgid "Sign in" -msgstr "" +msgstr "Registrovat se" #: templates/authentication/login.html:39 msgid "Forgot your password?" -msgstr "" +msgstr "Zapomněli jste heslo?" #: templates/authentication/password_reset_complete.html:8 #: templates/authentication/password_reset_confirm.html:8 @@ -87,72 +88,72 @@ msgstr "" #: templates/authentication/password_reset_form.html:8 #: templates/authentication/password_reset_form.html:20 msgid "Password reset" -msgstr "" +msgstr "Resetovat heslo" #: templates/authentication/password_reset_complete.html:15 msgid "Password reset complete! Click the link below to login." -msgstr "" +msgstr "Obnovení hesla bylo dokončeno! Klepnutím na odkaz níže se přihlásíte." #: templates/authentication/password_reset_complete.html:17 msgid "Login page" -msgstr "" +msgstr "Přihlašovací stránka" #: templates/authentication/password_reset_confirm.html:29 #: templates/authentication/password_reset_form.html:29 views.py:154 msgid "Submit" -msgstr "" +msgstr "Odeslat" #: templates/authentication/password_reset_done.html:15 msgid "Password reset email sent!" -msgstr "" +msgstr "E-mail pro resetování hesla byl odeslán!" #: views.py:74 msgid "Your password has been successfully changed." -msgstr "" +msgstr "Vaše heslo bylo úspěšně změněno." #: views.py:81 msgid "Current user password change" -msgstr "" +msgstr "Aktuální změna hesla uživatele" #: views.py:89 msgid "Changing the password is not allowed for this account." -msgstr "" +msgstr "Změna hesla není pro tento účet povolena." #: views.py:145 #, python-format msgid "Password change request performed on %(count)d user" -msgstr "" +msgstr "Žádost o změnu hesla byla provedena uživatelem %(count)d" #: views.py:147 #, python-format msgid "Password change request performed on %(count)d users" -msgstr "" +msgstr "Žádost o změnu hesla byla provedena u uživatelů %(count)d" #: views.py:156 msgid "Change user password" msgid_plural "Change users passwords" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Změnit heslo uživatele" +msgstr[1] "Změnit hesla uživatelů" +msgstr[2] "Změnit hesla uživatelů" +msgstr[3] "Změnit hesla uživatelů" #: views.py:166 #, python-format msgid "Change password for user: %s" -msgstr "" +msgstr "Změnit heslo pro uživatele: %s" #: views.py:186 msgid "" "Super user and staff user password reseting is not allowed, use the admin " "interface for these cases." -msgstr "" +msgstr "Vynulování uživatelského hesla super uživatele a zaměstnanců není povoleno, pro tyto případy použijte rozhraní správce." #: views.py:196 #, python-format msgid "Successful password reset for user: %s." -msgstr "" +msgstr "Úspěšné obnovení hesla pro uživatele: %s." #: views.py:202 #, python-format msgid "Error reseting password for user \"%(user)s\": %(error)s" -msgstr "" +msgstr "Chyba při resetování hesla pro uživatele „%(user)s“: %(error)s" 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 bc1d3a6a93..3abe28b96b 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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.mo b/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.mo index 667d0b6fff..e3bfc88692 100644 Binary files a/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.mo differ 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 813e9ea9ce..ff6b7b8e6b 100644 --- a/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/authentication/locale/de_DE/LC_MESSAGES/django.po @@ -4,6 +4,7 @@ # # Translators: # Berny , 2015 +# Marvin Haschker , 2019 # Mathias Behrle , 2019 # Robin Schubert , 2019 # Stefan Rempe, 2018 @@ -12,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-15 07:48+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:25-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -70,7 +71,7 @@ msgstr "Authentifizierungs-Mechanismus für die Benutzer. Optionen: Benutzername msgid "" "Maximum time a user clicking the \"Remember me\" checkbox will remain logged" " in. Value is time in seconds." -msgstr "" +msgstr "Die maximale Zeit, die ein Benutzer, der auf das Kontrollkästchen \"Angemeldet bleiben\" klickt, angemeldet bleibt. Der Wert wird in Sekunden angegeben." #: templates/authentication/login.html:11 msgid "Login" diff --git a/mayan/apps/authentication/locale/el/LC_MESSAGES/django.po b/mayan/apps/authentication/locale/el/LC_MESSAGES/django.po index 5139ccf67e..46d7e3bf2b 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 3f99ce5499..11352f47c4 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 fe6cec630f..755e77e064 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 e3c6bce5a3..76e09397a6 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 c5c2491123..114452738e 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 37bc14cc9e..797df462e1 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 6a307d1301..b0f5ad951a 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 6099ec0da3..fd396f23a9 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 a6eadf8622..46b776ac37 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 ed3e268892..4e69332bd3 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 1b07da745c..e453377294 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 a356410583..245c699655 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 f06eddf00d..ea9a4cc25f 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 b65a94c6db..45fd8062ad 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 58873f7f42..1625c958b7 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 9f3302a847..2fb0f66c71 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 be5ac42c63..1242ae7232 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 3cd2bff0f9..1eee67386f 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 436e4a78c9..12e66393b0 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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 e1224fef9f..f6a0859724 100644 --- a/mayan/apps/autoadmin/apps.py +++ b/mayan/apps/autoadmin/apps.py @@ -6,7 +6,6 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.common.apps import MayanAppConfig -from .dependencies import * # NOQA from .handlers import handler_auto_admin_account_password_change @@ -19,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 be8bd12077..2af5650dee 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ 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:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 8c8198d2a4..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 71f16462e3..ab9dfd4e5f 100644 --- a/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/bg/LC_MESSAGES/django.po @@ -5,15 +5,16 @@ # # Translators: # Pavlin Koldamov , 2019 +# Lyudmil Antonov , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" -"Last-Translator: Pavlin Koldamov , 2019\n" +"Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,49 +22,54 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" -msgstr "" +msgstr "Автоматичен администратор" #: auth/allauth.py:54 msgid "" "Welcome Admin! You have been given superuser privileges. Use them with " "caution." msgstr "" +"Добре дошли Админ! Получили сте привилегии за свръхпотребител. Използвайте " +"ги с повишено внимание." #: models.py:15 msgid "Account" -msgstr "" +msgstr "Акаунт" #: models.py:18 msgid "Password" -msgstr "" +msgstr "Парола" #: models.py:21 msgid "Password hash" -msgstr "" +msgstr "Хеш на парола" #: models.py:27 msgid "Autoadmin properties" -msgstr "" +msgstr "Свойства за автоматично администриране" #: settings.py:14 msgid "Sets the email of the automatically created super user account." -msgstr "" +msgstr "Задава имейла на автоматично създадения супер потребителски акаунт." #: settings.py:20 msgid "" "The password of the automatically created super user account. If it is equal" " to None, the password is randomly generated." msgstr "" +"Паролата на автоматично създадения супер потребителски акаунт. Ако е равна " +"на None, паролата се генерира на случаен принцип." #: settings.py:27 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 @@ -71,27 +77,29 @@ msgid "" "You have just finished installing %(project_title)s, " "congratulations!" msgstr "" +"Току-що завършихте с инсталирането на %(project_title)s , " +"поздравления!" #: templates/autoadmin/credentials.html:17 msgid "Login using the following credentials:" -msgstr "Логване, използвайки следните параметри:" +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 "" +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 1de1eecddc..eeb40a828d 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -22,7 +22,7 @@ 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:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 1a824dec50..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 bb9a93bfe6..d446426521 100644 --- a/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/cs/LC_MESSAGES/django.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Michal Švábík , 2019 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,48 +21,51 @@ 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:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" -msgstr "" +msgstr "Automatický správce" #: auth/allauth.py:54 msgid "" "Welcome Admin! You have been given superuser privileges. Use them with " "caution." msgstr "" +"Vítejte Admin! Dostali jste oprávnění superuživatele. Používejte je opatrně." #: models.py:15 msgid "Account" -msgstr "" +msgstr "Účet" #: models.py:18 msgid "Password" -msgstr "" +msgstr "Heslo" #: models.py:21 msgid "Password hash" -msgstr "" +msgstr "Hash hesla" #: models.py:27 msgid "Autoadmin properties" -msgstr "" +msgstr "Vlastnosti automatického správce" #: settings.py:14 msgid "Sets the email of the automatically created super user account." -msgstr "" +msgstr "Nastaví e-mail automaticky vytvořeného superuživatelského účtu." #: settings.py:20 msgid "" "The password of the automatically created super user account. If it is equal" " to None, the password is randomly generated." msgstr "" +"Heslo automaticky vytvořeného superuživatelského účtu. Pokud je rovno Žádné," +" heslo se vygeneruje náhodně." #: settings.py:27 msgid "The username of the automatically created super user account." -msgstr "" +msgstr "Uživatelské jméno automaticky vytvořeného superuživatelského účtu." #: templates/autoadmin/credentials.html:11 -msgid "First time login" +msgid "Automatic credentials" msgstr "" #: templates/autoadmin/credentials.html:16 @@ -67,28 +74,32 @@ msgid "" "You have just finished installing %(project_title)s, " "congratulations!" msgstr "" +"Právě jste dokončili instalaci %(project_title)s , " +"gratuluji!" #: templates/autoadmin/credentials.html:17 msgid "Login using the following credentials:" -msgstr "" - -#: templates/autoadmin/credentials.html:18 -#, python-format -msgid "Username: %(account)s" -msgstr "" +msgstr "Přihlaste se pomocí následujících přihlašovacích údajů:" #: templates/autoadmin/credentials.html:19 #, python-format -msgid "Email: %(email)s" -msgstr "" +msgid "Username: %(account)s" +msgstr "Uživatelské jméno: %(account)s" #: templates/autoadmin/credentials.html:20 #, python-format -msgid "Password: %(password)s" -msgstr "" +msgid "Email: %(email)s" +msgstr "E-mail: %(email)s" #: templates/autoadmin/credentials.html:21 +#, python-format +msgid "Password: %(password)s" +msgstr "Heslo: %(password)s" + +#: templates/autoadmin/credentials.html:23 msgid "" "Be sure to change the password to increase security and to disable this " "message." msgstr "" +"Nezapomeňte změnit heslo, abyste zvýšili zabezpečení a tuto zprávu " +"deaktivovali." diff --git a/mayan/apps/autoadmin/locale/da/LC_MESSAGES/django.po b/mayan/apps/autoadmin/locale/da/LC_MESSAGES/django.po index 657bd9fb0c..ee3dfbf2ba 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -17,7 +17,7 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 22a863c183..b8600ebc46 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 079d32b2fe..538b4c3948 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -22,7 +22,7 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "Automatischer Administrator" @@ -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 b06c652bdb..8c10dcc6ce 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 6b023a2f4a..f5a10c7028 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 9998d82eae..f19a8f9f68 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -22,7 +22,7 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "Administrador automático" @@ -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 358b4b9160..f7c5cd7f09 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -22,7 +22,7 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 6633818c39..52c6f81c75 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -24,7 +24,7 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "Auto administrateur" @@ -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 ae040149f1..8ccd501ad8 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 fc7dd04852..e3718ffef5 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 ead448e00d..d09fdc4295 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -24,7 +24,7 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "Auto amministratore" @@ -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 6254446797..42230b5f0b 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "Automātiskais administrators" @@ -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 28e6c1625b..5e1177c69a 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -23,7 +23,7 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 4e609862fd..f5c166dc7b 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -23,7 +23,7 @@ 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:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "Automatyczny administrator" @@ -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 f5703a2577..905e9be749 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 559507b2bd..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 fa9ac56ab8..5a95b496bf 100644 --- a/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/autoadmin/locale/pt_BR/LC_MESSAGES/django.po @@ -8,15 +8,16 @@ # Rogerio Falcone , 2019 # Aline Freitas , 2019 # José Samuel Facundo da Silva , 2019 +# Rodrigo de Almeida Sottomaior Macedo , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-0400\n" "PO-Revision-Date: 2019-04-14 04:06+0000\n" -"Last-Translator: José Samuel Facundo da Silva , 2019\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2019\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,15 +25,17 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" -msgstr "" +msgstr "Auto administrador" #: auth/allauth.py:54 msgid "" "Welcome Admin! You have been given superuser privileges. Use them with " "caution." msgstr "" +"Bem-vindo Admin! Você recebeu privilégios de super-usuário. Use-os com " +"cuidado." #: models.py:15 msgid "Account" @@ -48,25 +51,27 @@ msgstr "Senha hash" #: models.py:27 msgid "Autoadmin properties" -msgstr "" +msgstr "Propriedades Autoadmin" #: settings.py:14 msgid "Sets the email of the automatically created super user account." -msgstr "" +msgstr "Define o email da conta de super usuário criada automaticamente." #: settings.py:20 msgid "" "The password of the automatically created super user account. If it is equal" " to None, the password is randomly generated." msgstr "" +"A senha da conta de super-usuário criada automaticamente. Se for igual a " +"Nenhum, a senha será gerada aleatoriamente." #: settings.py:27 msgid "The username of the automatically created super user account." -msgstr "" +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 @@ -80,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 33beb93295..5413e17678 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -23,7 +23,7 @@ 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:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "Administrator automat" @@ -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 3f1d223593..776770534f 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -23,7 +23,7 @@ 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:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 c0f9b3ab8d..edf7d6e97a 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -17,7 +17,7 @@ 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:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 b57e6ecd8e..36bcab5cf6 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -22,7 +22,7 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 fb262d72bc..427e442e82 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 d64c55b4e4..9da73afa24 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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 3e0ed28b75..36898c8fa0 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:25-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" @@ -21,7 +21,7 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:16 settings.py:9 +#: apps.py:15 settings.py:9 msgid "Auto administrator" msgstr "" @@ -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/apps.py b/mayan/apps/cabinets/apps.py index 6011bd4874..65c3955067 100644 --- a/mayan/apps/cabinets/apps.py +++ b/mayan/apps/cabinets/apps.py @@ -18,7 +18,6 @@ from mayan.apps.events.permissions import permission_events_view from mayan.apps.documents.search import document_page_search, document_search from mayan.apps.navigation.classes import SourceColumn -from .dependencies import * # NOQA from .events import ( event_cabinet_edited, event_cabinet_add_document, event_cabinet_remove_document diff --git a/mayan/apps/cabinets/locale/ar/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/ar/LC_MESSAGES/django.po index ed8ce934b1..15b162d88c 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,8 +23,8 @@ 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:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 c08e2caf8d..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 80700925e5..30153b7d79 100644 --- a/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/bg/LC_MESSAGES/django.po @@ -7,15 +7,16 @@ # Roberto Rosario, 2017 # Pavlin Koldamov , 2017 # Iliya Georgiev , 2017 +# Lyudmil Antonov , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" -"Last-Translator: Iliya Georgiev , 2017\n" +"Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,31 +24,31 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" -msgstr "" +msgstr "Шкафове" #: links.py:30 links.py:44 workflow_actions.py:76 msgid "Remove from cabinets" -msgstr "" +msgstr "Извадете от шкафовете" #: links.py:35 links.py:40 workflow_actions.py:31 msgid "Add to cabinets" -msgstr "" +msgstr "Добавете към шкафове" #: links.py:63 msgid "Add new level" -msgstr "" +msgstr "Добавете ново ниво" #: links.py:69 views.py:45 msgid "Create cabinet" -msgstr "" +msgstr "Създайте шкаф" #: links.py:75 msgid "Delete" -msgstr "" +msgstr "Изтрийте" #: links.py:80 msgid "Edit" @@ -55,158 +56,172 @@ msgstr "Редактиране" #: links.py:88 msgid "All" -msgstr "" +msgstr "Всичко" #: links.py:92 msgid "Details" msgstr "Детайли" -#: models.py:35 search.py:16 -msgid "Label" -msgstr "" +#: models.py:36 +msgid "A short text used to identify the cabinet." +msgstr "Кратък текст, използван за идентифициране на шкафа." -#: models.py:38 +#: models.py:37 search.py:16 +msgid "Label" +msgstr "Етикет" + +#: 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 "" +msgstr "Шкаф" -#: models.py:136 serializers.py:139 +#: models.py:139 serializers.py:139 msgid "Parent and Label" -msgstr "" +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 "" +msgstr "%(model_name)s с този %(field_labels)s вече съществува." -#: models.py:160 +#: models.py:163 msgid "Document cabinet" -msgstr "" +msgstr "Шкаф за документи" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" -msgstr "" +msgstr "Шкафове за документи" #: permissions.py:12 msgid "Add documents to cabinets" -msgstr "" +msgstr "Добавете документи в шкафовете" #: permissions.py:15 msgid "Create cabinets" -msgstr "" +msgstr "Създайте шкафове" #: permissions.py:18 msgid "Delete cabinets" -msgstr "" +msgstr "Изтрийте шкафове" #: permissions.py:21 msgid "Edit cabinets" -msgstr "" +msgstr "Редактиране на шкафове" #: permissions.py:24 msgid "Remove documents from cabinets" -msgstr "" +msgstr "Извадете документи от шкафовете" #: permissions.py:27 msgid "View cabinets" -msgstr "" +msgstr "Разгледайте шкафовете" #: serializers.py:19 msgid "List of children cabinets." -msgstr "" +msgstr "Списък на деца шкафове." #: serializers.py:22 msgid "Number of documents on this cabinet level." -msgstr "" +msgstr "Брой документи на това ниво на шкафа." #: serializers.py:26 msgid "The name of this cabinet level appended to the names of its ancestors." msgstr "" +"Името на това ниво на шкафа се прибавя към имената на неговите предци." #: serializers.py:32 msgid "" "URL of the API endpoint showing the list documents inside this cabinet." msgstr "" +"URL на крайната точка на API, показваща списъка документи в този шкаф." #: serializers.py:68 serializers.py:179 msgid "Comma separated list of document primary keys to add to this cabinet." msgstr "" +"Разделен със запетаи списък на основни ключове за документ, които да " +"добавите към този шкаф." #: serializers.py:158 msgid "" "API URL pointing to a document in relation to the cabinet storing it. This " "URL is different than the canonical document URL." msgstr "" +"URL адрес на API, сочещ към документ във връзка с шкафа, който го съхранява." +" Този URL адрес е различен от основния URL адрес на документа." #: templates/cabinets/cabinet_details.html:17 msgid "Navigation:" -msgstr "" +msgstr "Навигация:" #: views.py:60 #, python-format msgid "Add new level to: %s" -msgstr "" +msgstr "Добавете ново ниво към: %s" #: views.py:87 #, python-format msgid "Delete the cabinet: %s?" -msgstr "" +msgstr "Изтрийте шкафа: %s?" #: views.py:122 msgid "" "Cabinet levels can contain documents or other cabinet sub levels. To add " "documents to a cabinet, select the cabinet view of a document view." msgstr "" +"Нивата на шкафа могат да съдържат документи или други нива на шкафа. За да " +"добавите документи в шкафа, изберете изглед на шкафа от изглед на документа." #: views.py:126 msgid "This cabinet level is empty" -msgstr "" +msgstr "Това ниво на шкафа е празно" #: views.py:129 #, python-format msgid "Details of cabinet: %s" -msgstr "" +msgstr "Подробности за шкафа: %s" #: views.py:149 #, python-format msgid "Edit cabinet: %s" -msgstr "" +msgstr "Редактиране на шкафа: %s" #: views.py:169 msgid "" "Cabinets are a multi-level method to organize documents. Each cabinet can " "contain documents as well as other sub level cabinets." msgstr "" +"Шкафовете са метод на много нива за организиране на документи. Всеки шкаф " +"може да съдържа документи, както и други шкафове на по-ниско ниво." #: views.py:173 msgid "No cabinets available" -msgstr "" +msgstr "Няма налични шкафове" #: views.py:205 msgid "Documents can be added to many cabinets." -msgstr "" +msgstr "Документите могат да се добавят в много шкафове." #: views.py:208 msgid "This document is not in any cabinet" -msgstr "" +msgstr "Този документ не е в нито един шкаф" #: views.py:211 #, python-format msgid "Cabinets containing document: %s" -msgstr "" +msgstr "Шкафове, съдържащи документ: %s" #: views.py:223 #, python-format msgid "Add to cabinet request performed on %(count)d document" -msgstr "" +msgstr "Добавяне към заявка за шкаф, изпълнено за %(count)d документ" #: views.py:226 #, python-format msgid "Add to cabinet request performed on %(count)d documents" -msgstr "" +msgstr "Добавяне към заявка за шкаф, изпълнено за %(count)d документа" #: views.py:233 msgid "Add" @@ -215,31 +230,31 @@ msgstr "Добави" #: views.py:248 #, python-format msgid "Add document \"%s\" to cabinets" -msgstr "" +msgstr "Добавете документ "%s" към шкафове" #: views.py:259 msgid "Cabinets to which the selected documents will be added." -msgstr "" +msgstr "Шкафове, към които ще бъдат добавени избраните документи." #: views.py:288 #, python-format msgid "Document: %(document)s is already in cabinet: %(cabinet)s." -msgstr "" +msgstr "Документ: %(document)s вече е в шкафа: %(cabinet)s." #: views.py:300 #, python-format msgid "Document: %(document)s added to cabinet: %(cabinet)s successfully." -msgstr "" +msgstr "Документ: %(document)s добавен към шкафа: %(cabinet)s успешно." #: views.py:313 #, python-format msgid "Remove from cabinet request performed on %(count)d document" -msgstr "" +msgstr "Премахване от заявка за шкаф, изпълнено на %(count)d документ" #: views.py:316 #, python-format msgid "Remove from cabinet request performed on %(count)d documents" -msgstr "" +msgstr "Премахване от заявка за шкаф, изпълнено за %(count)d документа" #: views.py:323 msgid "Remove" @@ -247,14 +262,14 @@ msgstr "Премахнете" #: views.py:349 msgid "Cabinets from which the selected documents will be removed." -msgstr "" +msgstr "Шкафове, от които ще бъдат премахнати избраните документи." #: views.py:377 #, python-format msgid "Document: %(document)s is not in cabinet: %(cabinet)s." -msgstr "" +msgstr "Документ: %(document)s не е в шкаф: %(cabinet)s." #: views.py:389 #, python-format msgid "Document: %(document)s removed from cabinet: %(cabinet)s." -msgstr "" +msgstr "Документ: %(document)s премахнат от шкаф: %(cabinet)s." 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 d62f66dfbf..2df1a7fdfa 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,8 +23,8 @@ 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:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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.mo b/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.mo index 5029c8f58e..9be4d22129 100644 Binary files a/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.po index 213be27475..8ec27c454e 100644 --- a/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/cs/LC_MESSAGES/django.po @@ -6,15 +6,16 @@ # Translators: # Jiri Fait , 2019 # Sebastian Fait , 2019 +# Michal Švábík , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" -"Last-Translator: Sebastian Fait , 2019\n" +"Last-Translator: Michal Švábík , 2019\n" "Language-Team: Czech (https://www.transifex.com/rosarior/teams/13584/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,8 +23,8 @@ 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:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" msgstr "Kabinety" @@ -60,34 +61,38 @@ 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 "" +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 "" +msgstr "Kabinety dokumentů" #: permissions.py:12 msgid "Add documents to cabinets" @@ -115,30 +120,35 @@ msgstr "Prohlížet kabinety" #: serializers.py:19 msgid "List of children cabinets." -msgstr "" +msgstr "Seznam podkabinetů" #: serializers.py:22 msgid "Number of documents on this cabinet level." -msgstr "" +msgstr "Počet dokumentů na této úrovni kabinetu." #: serializers.py:26 msgid "The name of this cabinet level appended to the names of its ancestors." -msgstr "" +msgstr "Název této úrovně kabinetu se připojil ke názvu jeho předka." #: serializers.py:32 msgid "" "URL of the API endpoint showing the list documents inside this cabinet." msgstr "" +"URL koncového bodu API zobrazující seznam dokumentů uvnitř tohoto kabinetu." #: serializers.py:68 serializers.py:179 msgid "Comma separated list of document primary keys to add to this cabinet." msgstr "" +"Seznam primárních klíčů dokumentu oddělených čárkami, které se mají přidat " +"do tohoto kabinetu." #: serializers.py:158 msgid "" "API URL pointing to a document in relation to the cabinet storing it. This " "URL is different than the canonical document URL." msgstr "" +"API URL směřující k dokumentu ve vztahu ke kabinetu, ve kterém je uložen. " +"Tato adresa URL je jiná než adresa kanonického dokumentu." #: templates/cabinets/cabinet_details.html:17 msgid "Navigation:" @@ -147,7 +157,7 @@ msgstr "Navigace:" #: views.py:60 #, python-format msgid "Add new level to: %s" -msgstr "" +msgstr "Přidat novou úroveň do: %s" #: views.py:87 #, python-format @@ -159,10 +169,13 @@ msgid "" "Cabinet levels can contain documents or other cabinet sub levels. To add " "documents to a cabinet, select the cabinet view of a document view." msgstr "" +"Úrovně kabinetu mohou obsahovat dokumenty nebo jiné podúrovně kabinetu. " +"Chcete-li do kabinetu přidat dokumenty, vyberte zobrazení kabinetu v pohledu" +" na dokument." #: views.py:126 msgid "This cabinet level is empty" -msgstr "" +msgstr "Tato úroveň kabinetu je prázdná" #: views.py:129 #, python-format @@ -179,14 +192,16 @@ msgid "" "Cabinets are a multi-level method to organize documents. Each cabinet can " "contain documents as well as other sub level cabinets." msgstr "" +"Kabinety jsou víceúrovňovou metodou organizace dokumentů. Každý kabinet může" +" obsahovat dokumenty i jiné kabinety další podúrovně." #: views.py:173 msgid "No cabinets available" -msgstr "" +msgstr "Nejsou k dispozici žádné kabinety" #: views.py:205 msgid "Documents can be added to many cabinets." -msgstr "" +msgstr "Dokumenty lze přidat do více kabinetů." #: views.py:208 msgid "This document is not in any cabinet" @@ -195,7 +210,7 @@ msgstr "Tento dokument není v žádném kabinetu" #: views.py:211 #, python-format msgid "Cabinets containing document: %s" -msgstr "" +msgstr "Kabinety obsahující dokument: %s" #: views.py:223 #, python-format @@ -218,17 +233,17 @@ msgstr "Přidat dokument \"%s\" ke kabinetům" #: views.py:259 msgid "Cabinets to which the selected documents will be added." -msgstr "" +msgstr "Kabinety, do kterých budou vybrané dokumenty přidány." #: views.py:288 #, python-format msgid "Document: %(document)s is already in cabinet: %(cabinet)s." -msgstr "" +msgstr "Dokument: %(document)s je již v kabinetu: %(cabinet)s." #: views.py:300 #, python-format msgid "Document: %(document)s added to cabinet: %(cabinet)s successfully." -msgstr "" +msgstr "Dokument: %(document)s byl přidán do kabinetu: %(cabinet)s úspěšně." #: views.py:313 #, python-format @@ -251,9 +266,9 @@ msgstr "Kabinety ze kterých budou vybrané dokumenty odstraněny" #: views.py:377 #, python-format msgid "Document: %(document)s is not in cabinet: %(cabinet)s." -msgstr "" +msgstr "Dokument: %(document)s není v kabinetu: %(cabinet)s." #: views.py:389 #, python-format msgid "Document: %(document)s removed from cabinet: %(cabinet)s." -msgstr "" +msgstr "Dokument: %(document)s byl odstraněn z kabinetu: %(cabinet)s." 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 452fb47e12..8f9abb3b09 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,8 +21,8 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 2cd1bbb419..542592848b 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -24,8 +24,8 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 cd6fea7a48..58a5bd9a73 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,8 +21,8 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 1fbb3ba9c0..cb4a88d422 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,8 +18,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 401d6cce1c..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 55265679a5..6d2be90e60 100644 --- a/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.po +++ b/mayan/apps/cabinets/locale/es/LC_MESSAGES/django.po @@ -4,16 +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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2017-04-21 16:25+0000\n" -"Last-Translator: Roberto Rosario, 2018\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" @@ -21,19 +22,19 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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:50 permissions.py:7 views.py:163 #: workflow_actions.py:22 msgid "Cabinets" -msgstr "Archivadores" +msgstr "Gabinetes" #: links.py:30 links.py:44 workflow_actions.py:76 msgid "Remove from cabinets" -msgstr "Remover de archivador" +msgstr "Retirar de los gabinetes" #: links.py:35 links.py:40 workflow_actions.py:31 msgid "Add to cabinets" -msgstr "Agregar a archivadores" +msgstr "Agregar a gabinetes" #: links.py:63 msgid "Add new level" @@ -41,7 +42,7 @@ msgstr "Agregar un nuevo nivel" #: links.py:69 views.py:45 msgid "Create cabinet" -msgstr "Crear archivador" +msgstr "Crear gabinete" #: links.py:75 msgid "Delete" @@ -59,85 +60,89 @@ 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 "Archivador" +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 "Archivador de documento" +msgstr "Gabinete de documentos" -#: models.py:161 +#: models.py:164 msgid "Document cabinets" -msgstr "Archivadores de documento" +msgstr "Gabinetes de documentos" #: permissions.py:12 msgid "Add documents to cabinets" -msgstr "Agregar documentos a archivadores" +msgstr "Agregar documentos a gabinetes" #: permissions.py:15 msgid "Create cabinets" -msgstr "Crear archivadores" +msgstr "Crear gabinetes" #: permissions.py:18 msgid "Delete cabinets" -msgstr "Borrar archivadores" +msgstr "Borrar gabinetes" #: permissions.py:21 msgid "Edit cabinets" -msgstr "Editar archivadores" +msgstr "Editar gabinetes" #: permissions.py:24 msgid "Remove documents from cabinets" -msgstr "Remover documentos de archivadores" +msgstr "Quitar documentos de los gabinetes" #: permissions.py:27 msgid "View cabinets" -msgstr "Ver archivadores" +msgstr "Ver gabinetes" #: serializers.py:19 msgid "List of children cabinets." -msgstr "Lista de los gabinetes subsiguientes." +msgstr "Lista de los gabinetes contenidos." #: serializers.py:22 msgid "Number of documents on this cabinet level." -msgstr "Número de documentos en este nivel de archivador." +msgstr "Número de documentos en este nivel de gabinetes." #: serializers.py:26 msgid "The name of this cabinet level appended to the names of its ancestors." msgstr "" -"El nombre de este nivel de archivador anejado a de los archivadores que lo " +"El nombre de este nivel de gabinete añadido al de los gabinetes que lo " "contienen. " #: serializers.py:32 msgid "" "URL of the API endpoint showing the list documents inside this cabinet." msgstr "" -"URL del servicio de la API que muetra los documentos contenidos en este " -"archivador. " +"URL de la API del servicio que muestra los documentos contenidos en este " +"gabinete." #: serializers.py:68 serializers.py:179 msgid "Comma separated list of document primary keys to add to this cabinet." msgstr "" -"Lista separada por comas de llaves primarias de documentos para agregar a " -"este archivador." +"Lista separada por comas de las llaves primarias de los documentos que se " +"añaden a este gabinete." #: serializers.py:158 msgid "" @@ -145,7 +150,7 @@ msgid "" "URL is different than the canonical document URL." msgstr "" "URL de la API que apunta a un documento en relación con el gabinete que lo " -"almacena. Esta URL es diferente de la URL del documento canónico." +"almacena. Esta URL es diferente de la URL canónica del documento." #: templates/cabinets/cabinet_details.html:17 msgid "Navigation:" @@ -159,7 +164,7 @@ msgstr "Agregar un nuevo nivel a: %s" #: views.py:87 #, python-format msgid "Delete the cabinet: %s?" -msgstr "¿Borrar archivador: %s?" +msgstr "¿Borrar gabinete: %s?" #: views.py:122 msgid "" @@ -177,12 +182,12 @@ msgstr "Este nivel de gabinete está vacío" #: views.py:129 #, python-format msgid "Details of cabinet: %s" -msgstr "Detalles de archivador: %s" +msgstr "Detalles del gabinete: %s" #: views.py:149 #, python-format msgid "Edit cabinet: %s" -msgstr "Editar archivador: %s" +msgstr "Editar gabinete: %s" #: views.py:169 msgid "" @@ -208,17 +213,17 @@ msgstr "Este documento no está en ningún gabinete" #: views.py:211 #, python-format msgid "Cabinets containing document: %s" -msgstr "Archivadores que contienen el documento: %s" +msgstr "Gabinetes que contienen el documento: %s" #: views.py:223 #, python-format msgid "Add to cabinet request performed on %(count)d document" -msgstr "Solicitud de añadir a gabinete realizada en %(count)d documento" +msgstr "Realizada solicitud de añadir a gabinete el documento %(count)d" #: views.py:226 #, python-format msgid "Add to cabinet request performed on %(count)d documents" -msgstr "Solicitud de añadir a gabinete realizada en %(count)d documentos" +msgstr "Realizada solicitud de añadir a gabinete de los documentos %(count)d" #: views.py:233 msgid "Add" @@ -227,11 +232,11 @@ msgstr "Agregar" #: views.py:248 #, python-format msgid "Add document \"%s\" to cabinets" -msgstr "Agregar documento \"%s\" a archivadores" +msgstr "Agregar documento \"%s\" a los gabinetes" #: views.py:259 msgid "Cabinets to which the selected documents will be added." -msgstr "Archivador a los cuales el documento seleccionado va a ser agregado." +msgstr "Gabinetes a los cuales el documento seleccionado va a ser agregado." #: views.py:288 #, python-format @@ -247,12 +252,12 @@ msgstr "" #: views.py:313 #, python-format msgid "Remove from cabinet request performed on %(count)d document" -msgstr "Solicitud de retirar del gabinete realizada en el documento %(count)d" +msgstr "Realizada solicitud de retirar del gabinete el documento %(count)d" #: views.py:316 #, python-format msgid "Remove from cabinet request performed on %(count)d documents" -msgstr "Solicitud de retirar del gabinete realizada en el documento %(count)d" +msgstr "Realizada solicitud de retirar del gabinete los documentos %(count)d" #: views.py:323 msgid "Remove" diff --git a/mayan/apps/cabinets/locale/fa/LC_MESSAGES/django.po b/mayan/apps/cabinets/locale/fa/LC_MESSAGES/django.po index ccd2a06352..206f818f5c 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -22,8 +22,8 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 64029bad29..58065f7414 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -25,8 +26,8 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 ea5b7b7853..586d35700f 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -22,8 +22,8 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 cee573b074..762f98e75a 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,8 +23,8 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 fefb04b8f4..2fc552659f 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -25,8 +25,8 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 ac4d7872f9..c5e859b5ae 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,8 +21,8 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 d38b7477ea..085a3f513f 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -25,8 +25,8 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 3c39f52aee..3f909f5ecf 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,8 +23,8 @@ 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:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 64e1c872c5..c19256aa8a 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,8 +23,8 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 a0a2c0d64f..8132a8e9f1 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -24,8 +24,8 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 76d2badc63..b223fc06ae 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -24,8 +24,8 @@ 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:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 11868c31ba..282f9944a4 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -25,8 +25,8 @@ 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:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 8c1d28ab3d..f71cbba7a7 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,8 +21,8 @@ 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:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 1ad1599e45..0c8e080a98 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,8 +21,8 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 919397a9b2..f876152eae 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -22,8 +22,8 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 80fa19cb0d..2225e8a43f 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,8 +21,8 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:50 apps.py:111 apps.py:119 apps.py:122 events.py:7 forms.py:16 -#: links.py:24 menus.py:16 models.py:47 permissions.py:7 views.py:163 +#: 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: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 3207502700..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 ( @@ -77,7 +76,7 @@ class APICheckedoutDocumentView(generics.RetrieveDestroyAPIView): def delete(self, request, *args, **kwargs): document = self.get_object().document - if document.checkout_info().user == request.user: + if document.get_check_out_info().user == request.user: AccessControlList.objects.check_access( obj=document, permissions=(permission_document_check_in,), user=request.user 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 4db1f00348..9d2193d170 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -161,68 +177,57 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 8542e7da4f..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 68f75adccc..5052b0f0e9 100644 --- a/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/bg/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,13 +18,13 @@ 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 "" +msgstr "Изписване" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" -msgstr "" +msgstr "Изписани документи" #: events.py:10 msgid "Document automatically checked in" @@ -35,35 +36,35 @@ msgstr "Докъментът е регистриран" #: events.py:17 msgid "Document checked out" -msgstr "Документът е проверен." +msgstr "Документът е изписан" #: events.py:20 msgid "Document forcefully checked in" msgstr "Документът е принудително регистриран" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." -msgstr "Документът вече е проверен." +msgstr "Документът вече е изписан." #: forms.py:28 msgid "Document status" -msgstr "" +msgstr "Състояние на документа" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" msgstr "Потребител" #: forms.py:43 msgid "Check out time" -msgstr "" +msgstr "Време на изписване" #: forms.py:48 msgid "Check out expiration" -msgstr "" +msgstr "Срок на изписване" #: forms.py:53 msgid "New versions allowed?" -msgstr "" +msgstr "Разрешени ли са нови версии?" #: forms.py:54 msgid "Yes" @@ -75,67 +76,83 @@ msgstr "Не" #: links.py:41 msgid "Check out document" -msgstr "" +msgstr "Изписване на документ" -#: links.py:47 -msgid "Check in document" -msgstr "" +#: 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 "" +msgstr "Регистриране / изписване" #: literals.py:12 msgid "Checked out" -msgstr "" +msgstr "Изписан" #: literals.py:13 msgid "Checked in/available" -msgstr "" +msgstr "Регистрирани / налични" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" -msgstr "" +msgstr "Документ" -#: models.py:31 +#: models.py:34 msgid "Check out date and time" -msgstr "" +msgstr "Дата и час на изписване" -#: models.py:35 +#: models.py:38 msgid "Amount of time to hold the document checked out in minutes." -msgstr "Време за задържане на проверения документ в минути." +msgstr "Време за задържане на изписания документ в минути." -#: models.py:37 +#: models.py:40 msgid "Check out expiration date and time" -msgstr "Проверете срока на валидност" +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 "" +msgstr "Блокиране на качване на нова версия" -#: models.py:55 permissions.py:7 +#: models.py:59 permissions.py:7 msgid "Document checkout" -msgstr "Проверка на документ" +msgstr "Изписване на документ" -#: models.py:56 +#: models.py:60 msgid "Document checkouts" -msgstr "" +msgstr "Изписвания на документи" -#: models.py:64 +#: models.py:68 msgid "Check out expiration date and time must be in the future." -msgstr "" +msgstr "Датата и часът за срока на изписване трябва да бъдат в бъдещето." -#: models.py:116 +#: models.py:120 msgid "New version block" -msgstr "" +msgstr "Ново блокиране на версията" -#: models.py:117 +#: models.py:121 msgid "New version blocks" -msgstr "" +msgstr "Нови блокирания на версията" + +#: models.py:141 +msgid "Checkout time and date" +msgstr "Час и дата на изписване" + +#: models.py:146 +msgid "Checkout expiration" +msgstr "Срок на изписване" #: permissions.py:10 msgid "Check in documents" @@ -147,82 +164,63 @@ msgstr "Регистрирай принудилтелно документи" #: permissions.py:16 msgid "Check out documents" -msgstr "Провери документи" +msgstr "Изпиши документи" #: permissions.py:19 msgid "Check out details view" -msgstr "" +msgstr "Изглед на подробности за изписване" #: queues.py:13 msgid "Checkouts periodic" -msgstr "" +msgstr "Периодика на изписванията" #: queues.py:17 msgid "Check expired checkouts" -msgstr "" +msgstr "Провери изписванията с изтекъл срок" -#: serializers.py:26 +#: serializers.py:31 msgid "Primary key of the document to be checked out." -msgstr "" +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] "Проверете в документа %(count)d" +msgstr[1] "Впишете %(count)d документа" -#: views.py:41 +#: views.py:48 #, python-format -msgid "Check in the document: %s?" -msgstr "" +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" +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 "" +msgstr "Не са изписани документи" #: widgets.py:27 msgid "Amount" -msgstr "" +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 7aad65ebf0..e241966e65 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -162,68 +178,51 @@ msgstr "Periodične provjere" msgid "Check expired checkouts" msgstr "Provjerite istekle provjere" -#: serializers.py:26 +#: serializers.py:31 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 ca0bfd9215..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 2aaa00d840..4f94a4332e 100644 --- a/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/cs/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -17,17 +18,17 @@ 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 "" +msgstr "Kontrola" -#: dashboard_widgets.py:16 +#: dashboard_widgets.py:16 views.py:172 msgid "Checked out documents" -msgstr "" +msgstr "Dokomenty ke kontrole" #: events.py:10 msgid "Document automatically checked in" -msgstr "" +msgstr "Provedena automatická vstupní kontrola" #: events.py:14 msgid "Document checked in" @@ -41,17 +42,17 @@ msgstr "" msgid "Document forcefully checked in" msgstr "" -#: exceptions.py:27 views.py:122 +#: exceptions.py:27 msgid "Document already checked out." msgstr "" #: forms.py:28 msgid "Document status" -msgstr "" +msgstr "Stav dokumentu" -#: forms.py:39 models.py:41 views.py:162 +#: forms.py:39 models.py:44 models.py:136 msgid "User" -msgstr "" +msgstr "Uživatel" #: forms.py:43 msgid "Check out time" @@ -63,25 +64,33 @@ msgstr "" #: forms.py:53 msgid "New versions allowed?" -msgstr "" +msgstr "Povoleny nové verze?" #: forms.py:54 msgid "Yes" -msgstr "" +msgstr "Ano" #: forms.py:54 msgid "No" -msgstr "" +msgstr "Ne" #: links.py:41 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,48 +102,56 @@ msgstr "" msgid "Checked in/available" msgstr "" -#: models.py:28 models.py:110 +#: models.py:31 models.py:114 msgid "Document" -msgstr "" +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:121 +msgid "New version blocks" msgstr "" -#: models.py:117 -msgid "New version blocks" +#: models.py:141 +msgid "Checkout time and date" +msgstr "" + +#: models.py:146 +msgid "Checkout expiration" msgstr "" #: permissions.py:10 @@ -161,68 +178,53 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 "" +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 0b2340977c..1cd315540b 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "" @@ -161,68 +177,49 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 93d470e471..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 c5366bfbb2..88491edf26 100644 --- a/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/de_DE/LC_MESSAGES/django.po @@ -6,13 +6,14 @@ # Berny , 2015-2016 # Bjoern Kowarsch , 2018 # Jesaja Everling , 2017 +# Marvin Haschker , 2019 # Mathias Behrle , 2018-2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,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" @@ -45,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." @@ -53,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" @@ -81,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" @@ -97,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" @@ -165,68 +182,49 @@ msgstr "Ausbuchungen regelmäßig" msgid "Check expired checkouts" msgstr "Prüfe abgelaufene Ausbuchungen" -#: serializers.py:26 +#: serializers.py:31 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 "" +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 40ad57d50b..3c8ace96d7 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "" @@ -161,68 +177,49 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 6b57846608..b1e6ef2656 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "" @@ -161,68 +177,49 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 fbdd0f76c4..0d2d1469bc 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-09-24 21:04+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -162,68 +178,49 @@ msgstr "Reservas periódicas" msgid "Check expired checkouts" msgstr "Comprobar reservaciones caducadas" -#: serializers.py:26 +#: serializers.py:31 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 a56047893c..4c5eab7e96 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "ورود اسناد" @@ -162,68 +178,49 @@ msgstr "دوره های آموزشی" msgid "Check expired checkouts" msgstr "بررسی پرداخت های منقضی شده را بررسی کنید" -#: serializers.py:26 +#: serializers.py:31 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 e824a92fc0..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 1c296c3bd4..838633505e 100644 --- a/mayan/apps/checkouts/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/fr/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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -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" @@ -166,68 +182,49 @@ msgstr "Verrouillages périodiques" msgid "Check expired checkouts" msgstr "Vérifier les verrouillages expirés" -#: serializers.py:26 +#: serializers.py:31 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 "" +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 ee20fcc7a8..3c5de4c3ab 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -162,68 +178,49 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 dcbaea32b7..fc06da5d58 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "" @@ -161,68 +177,47 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 73d078f9bf..64def515fc 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -162,68 +178,49 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 1038175801..3118dd8d41 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -162,68 +178,51 @@ msgstr "Izraksti periodiski" msgid "Check expired checkouts" msgstr "Pārbaudiet izbeigušos izrakstus" -#: serializers.py:26 +#: serializers.py:31 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 6175e7fda4..8c6dacdc6a 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "" @@ -163,68 +179,49 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 d271d97b2f..e76a0c070b 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-09-23 09:57+0000\n" -"Last-Translator: Tomasz Szymanowicz \n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -164,68 +180,53 @@ msgstr "Okresowe blokady" msgid "Check expired checkouts" msgstr "Sprawdź wygasłe blokady" -#: serializers.py:26 +#: serializers.py:31 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 c066442797..c378ab3ac2 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "" @@ -161,68 +177,49 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 61054b5fdd..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 51eb069d57..f3db71a9b2 100644 --- a/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/checkouts/locale/pt_BR/LC_MESSAGES/django.po @@ -6,12 +6,13 @@ # Aline Freitas , 2016 # Jadson Ribeiro , 2017 # José Samuel Facundo da Silva , 2018 +# Rodrigo de Almeida Sottomaior Macedo , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -20,13 +21,13 @@ 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 "" +msgstr "Documentos retirados" #: events.py:10 msgid "Document automatically checked in" @@ -44,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." @@ -52,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" @@ -80,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" @@ -96,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" @@ -164,68 +181,49 @@ msgstr "Reservas periódicas" msgid "Check expired checkouts" msgstr "Verificar reservas expiradas" -#: serializers.py:26 +#: serializers.py:31 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 "" +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 97c4cc8ed6..88a5fedceb 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-09-03 08:31+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -162,68 +178,51 @@ msgstr "Consemnări de ieșire periodice" msgid "Check expired checkouts" msgstr "Consemnați drept intrate documentele cu consemnarea de ieșire expirată" -#: serializers.py:26 +#: serializers.py:31 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 184212fa4c..ae2cd0a8c0 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "Освобождение документов" @@ -162,68 +178,53 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 f31ef8b9e9..c01705b21c 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "" @@ -161,68 +177,53 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 eee3d0eaa5..502c5aabeb 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -162,68 +178,49 @@ msgstr "Periyodik teslim alma" msgid "Check expired checkouts" msgstr "Süresi geçen teslim alma kayıt kontrolü" -#: serializers.py:26 +#: serializers.py:31 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 f4b7f34282..f5b7c49a9d 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "" @@ -161,68 +177,47 @@ msgstr "" msgid "Check expired checkouts" msgstr "" -#: serializers.py:26 +#: serializers.py:31 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 522ed621ee..1d45878206 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-26 01:01+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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 "签入文档" @@ -162,68 +178,47 @@ msgstr "签出到期时间" msgid "Check expired checkouts" msgstr "检查过期的签出" -#: serializers.py:26 +#: serializers.py:31 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/serializers.py b/mayan/apps/checkouts/serializers.py index b3df78d150..8ca3911efc 100644 --- a/mayan/apps/checkouts/serializers.py +++ b/mayan/apps/checkouts/serializers.py @@ -16,7 +16,12 @@ class DocumentCheckoutSerializer(serializers.ModelSerializer): document = DocumentSerializer() class Meta: - fields = ('document',) + extra_kwargs = { + 'url': { + 'view_name': 'rest_api:checkedout-document-view' + }, + } + fields = ('document', 'id', 'url') model = DocumentCheckout @@ -32,7 +37,7 @@ class NewDocumentCheckoutSerializer(serializers.ModelSerializer): class Meta: fields = ( 'block_new_version', 'document', 'document_pk', - 'expiration_datetime', 'id' + 'expiration_datetime', 'id', ) model = DocumentCheckout read_only_fields = ('document',) diff --git a/mayan/apps/checkouts/tests/mixins.py b/mayan/apps/checkouts/tests/mixins.py index 2e7d34adb8..82f2474414 100644 --- a/mayan/apps/checkouts/tests/mixins.py +++ b/mayan/apps/checkouts/tests/mixins.py @@ -5,18 +5,13 @@ 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 class DocumentCheckoutsAPIViewTestMixin(object): - def _request_checkedout_document_view(self): - return self.get( - viewname='rest_api:checkedout-document-view', - kwargs={'pk': self.test_check_out.pk} - ) - - def _request_test_document_check_out_view(self): + def _request_test_document_check_out_create_api_view(self): return self.post( viewname='rest_api:checkout-document-list', data={ 'document_pk': self.test_document.pk, @@ -24,7 +19,19 @@ class DocumentCheckoutsAPIViewTestMixin(object): } ) - def _request_checkout_list_view(self): + def _request_test_document_check_out_delete_api_view(self): + return self.delete( + viewname='rest_api:checkedout-document-view', + kwargs={'pk': self.test_check_out.pk} + ) + + def _request_test_document_check_out_detail_api_view(self): + return self.get( + viewname='rest_api:checkedout-document-view', + kwargs={'pk': self.test_check_out.pk} + ) + + def _request_test_document_check_out_list_api_view(self): return self.get(viewname='rest_api:checkout-document-list') @@ -64,17 +71,21 @@ 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={ + 'pk': self.test_document.pk + }, + ) - def _request_test_document_check_out_view(self): + def _request_test_document_check_out_post_view(self): return self.post( viewname='checkouts:check_out_document', kwargs={ 'pk': self.test_document.pk @@ -84,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 ad475f5c4d..73a698d280 100644 --- a/mayan/apps/checkouts/tests/test_api.py +++ b/mayan/apps/checkouts/tests/test_api.py @@ -4,12 +4,12 @@ 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 ..models import DocumentCheckout from ..permissions import ( + permission_document_check_in, permission_document_check_in_override, permission_document_check_out, permission_document_check_out_detail_view ) @@ -22,32 +22,95 @@ class CheckoutsAPITestCase( DocumentCheckoutsAPIViewTestMixin, DocumentCheckoutTestMixin, DocumentTestMixin, BaseAPITestCase ): - def test_checkedout_document_view_no_access(self): + def test_document_check_out_create_api_view_no_permission(self): + response = self._request_test_document_check_out_create_api_view() + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + self.assertFalse(self.test_document.is_checked_out()) + + def test_document_check_out_create_api_view_with_access(self): + self.grant_access( + obj=self.test_document, permission=permission_document_check_out + ) + + response = self._request_test_document_check_out_create_api_view() + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + self.assertTrue(self.test_document.is_checked_out()) + + def test_document_check_out_delete_api_view_no_permission(self): self._check_out_test_document() - response = self._request_checkedout_document_view() + response = self._request_test_document_check_out_delete_api_view() + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + self.assertTrue(self.test_document.is_checked_out()) + + def test_document_check_out_delete_api_view_with_access(self): + self._check_out_test_document() + + self.grant_access( + obj=self.test_document, permission=permission_document_check_in + ) + + response = self._request_test_document_check_out_delete_api_view() + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + self.assertFalse(self.test_document.is_checked_out()) + + def test_document_check_in_forcefull_api_view_no_permission(self): + self._create_test_user() + self._check_out_test_document(user=self.test_user) + + self.grant_access( + obj=self.test_document, permission=permission_document_check_in + ) + + response = self._request_test_document_check_out_delete_api_view() + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + self.assertTrue(self.test_document.is_checked_out()) + + def test_document_check_in_forcefull_api_view_with_access(self): + self._create_test_user() + self._check_out_test_document(user=self.test_user) + + self.grant_access( + obj=self.test_document, + permission=permission_document_check_in_override + ) + + response = self._request_test_document_check_out_delete_api_view() + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + self.assertFalse(self.test_document.is_checked_out()) + + def test_document_check_out_detail_api_view_no_permission(self): + self._check_out_test_document() + + response = self._request_test_document_check_out_detail_api_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) - def test_checkedout_document_view_with_checkout_access(self): + def test_document_check_out_detail_api_view_with_check_out_detail_access(self): self._check_out_test_document() self.grant_access( obj=self.test_document, permission=permission_document_check_out_detail_view ) - response = self._request_checkedout_document_view() + response = self._request_test_document_check_out_detail_api_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) - def test_checkedout_document_view_with_document_access(self): + def test_document_check_out_detail_api_view_with_document_access(self): self._check_out_test_document() self.grant_access( obj=self.test_document, permission=permission_document_view ) - response = self._request_checkedout_document_view() + response = self._request_test_document_check_out_detail_api_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) - def test_checkedout_document_view_with_access(self): + def test_document_check_out_detail_api_view_with_full_access(self): self._check_out_test_document() self.grant_access( obj=self.test_document, permission=permission_document_view @@ -57,58 +120,48 @@ class CheckoutsAPITestCase( permission=permission_document_check_out_detail_view ) - response = self._request_checkedout_document_view() + response = self._request_test_document_check_out_detail_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['document']['uuid'], force_text(self.test_document.uuid) ) - def test_document_checkout_no_access(self): - response = self._request_test_document_check_out_view() - - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - self.assertEqual(DocumentCheckout.objects.count(), 0) - - def test_document_checkout_with_access(self): - self.grant_access(permission=permission_document_check_out, obj=self.test_document) - - response = self._request_test_document_check_out_view() - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - - self.assertEqual( - DocumentCheckout.objects.first().document, self.test_document - ) - - def test_checkout_list_view_no_access(self): + def test_document_check_out_list_api_view_no_permission(self): self._check_out_test_document() - response = self._request_checkout_list_view() - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertNotContains(response=response, text=self.test_document.uuid) + response = self._request_test_document_check_out_list_api_view() + self.assertNotContains( + response=response, text=self.test_document.uuid, + status_code=status.HTTP_200_OK + ) - def test_checkout_list_view_with_document_access(self): + def test_document_check_out_list_api_view_with_document_access(self): self._check_out_test_document() self.grant_access( permission=permission_document_view, obj=self.test_document ) - response = self._request_checkout_list_view() - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertNotContains(response=response, text=self.test_document.uuid) + response = self._request_test_document_check_out_list_api_view() + self.assertNotContains( + response=response, text=self.test_document.uuid, + status_code=status.HTTP_200_OK + ) - def test_checkout_list_view_with_checkout_access(self): + def test_document_check_out_list_api_view_with_check_out_detail_access(self): self._check_out_test_document() self.grant_access( obj=self.test_document, permission=permission_document_check_out_detail_view ) - response = self._request_checkout_list_view() - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertNotContains(response=response, text=self.test_document.uuid) + response = self._request_test_document_check_out_list_api_view() + self.assertNotContains( + response=response, text=self.test_document.uuid, + status_code=status.HTTP_200_OK + ) - def test_checkout_list_view_with_access(self): + def test_document_check_out_list_api_view_with_full_access(self): self._check_out_test_document() self.grant_access( @@ -119,6 +172,8 @@ class CheckoutsAPITestCase( permission=permission_document_check_out_detail_view ) - response = self._request_checkout_list_view() - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertContains(response=response, text=self.test_document.uuid) + response = self._request_test_document_check_out_list_api_view() + self.assertContains( + response=response, text=self.test_document.uuid, + status_code=status.HTTP_200_OK + ) 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 8cae22a1f4..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,13 +67,109 @@ class DocumentCheckoutViewTestCase( ) ) - def test_document_check_out_view_no_permission(self): - response = self._request_test_document_check_out_view() - self.assertEqual(response.status_code, 403) + 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, 404) self.assertFalse(self.test_document.is_checked_out()) - def test_document_check_out_view_with_access(self): + def test_document_check_out_get_view_with_access(self): + self.grant_access( + obj=self.test_document, permission=permission_document_check_out + ) + + response = self._request_test_document_check_out_get_view() + self.assertEqual(response.status_code, 200) + + self.assertFalse(self.test_document.is_checked_out()) + + def test_document_check_out_post_view_no_permission(self): + response = self._request_test_document_check_out_post_view() + self.assertEqual(response.status_code, 404) + + self.assertFalse(self.test_document.is_checked_out()) + + def test_document_check_out_post_view_with_access(self): self.grant_access( obj=self.test_document, permission=permission_document_check_out ) @@ -82,11 +178,107 @@ class DocumentCheckoutViewTestCase( permission=permission_document_check_out_detail_view ) - response = self._request_test_document_check_out_view() + response = self._request_test_document_check_out_post_view() self.assertEqual(response.status_code, 302) 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() @@ -156,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 @@ -201,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 ) @@ -219,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 3d7f633675..2ba24c0688 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -16,20 +16,17 @@ from django.utils.module_loading import import_string from django.utils.translation import ugettext_lazy as _ from .classes import Template -from .dependencies import * # NOQA from .handlers import ( handler_pre_initial_setup, handler_pre_upgrade, handler_user_locale_profile_session_config, handler_user_locale_profile_create ) from .links import ( - link_about, link_current_user_locale_profile_edit, link_license, + link_about, link_book, link_current_user_locale_profile_edit, link_license, link_object_error_list_clear, link_setup, link_tools ) 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 @@ -97,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( @@ -108,11 +108,11 @@ class CommonApp(MayanAppConfig): menu_about.bind_links( links=( - link_tools, link_setup, link_about, link_license, + link_tools, link_setup, link_about, link_book, link_license, ) ) - 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', @@ -164,6 +164,7 @@ class CommonApp(MayanAppConfig): 'disable_existing_loggers': False, 'formatters': { 'intermediate': { + '()': 'mayan.apps.common.log.ColorFormatter', 'format': '%(name)s <%(process)d> [%(levelname)s] "%(funcName)s() line %(lineno)d %(message)s"', }, 'logfile': { 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/compat.py b/mayan/apps/common/compat.py index fb0d6a0dcf..88b4807305 100644 --- a/mayan/apps/common/compat.py +++ b/mayan/apps/common/compat.py @@ -1,8 +1,14 @@ from __future__ import unicode_literals +import os import types +from django.conf import settings +from django.http.response import StreamingHttpResponse from django.utils import six +from django.utils.six.moves.urllib.parse import quote + +from mayan.apps.mimetype.api import get_mimetype if six.PY3: dict_type = dict @@ -22,3 +28,75 @@ except NameError: FileNotFoundErrorException = IOError else: FileNotFoundErrorException = FileNotFoundError # NOQA + + +class FileResponse(StreamingHttpResponse): + """ + Port of Django's 2.2 FileResponse + Modified to allows downloading non file like content as attachment + A streaming HTTP response class optimized for files. + TODO: To be remove when the code moves to Django 2.2 + """ + block_size = 4096 + + def __init__(self, as_attachment=False, filename='', *args, **kwargs): + self.as_attachment = as_attachment + self.filename = filename + super(FileResponse, self).__init__(*args, **kwargs) + + def _set_as_attachment(self, filename): + if self.as_attachment: + filename = self.filename or os.path.basename(filename) + if filename: + try: + filename.encode('ascii') + file_expr = 'filename="{}"'.format(filename) + except UnicodeEncodeError: + file_expr = "filename*=utf-8''{}".format(quote(filename)) + self['Content-Disposition'] = 'attachment; {}'.format(file_expr) + + def _set_streaming_content(self, value): + if not hasattr(value, 'read'): + self.file_to_stream = None + result = super(FileResponse, self)._set_streaming_content(value) + self._set_as_attachment(filename=self.filename) + + return result + + self.file_to_stream = filelike = value + if hasattr(filelike, 'close'): + self._closable_objects.append(filelike) + value = iter(lambda: filelike.read(self.block_size), b'') + self.set_headers(filelike) + super(FileResponse, self)._set_streaming_content(value) + + def set_headers(self, filelike): + """ + Set some common response headers (Content-Length, Content-Type, and + Content-Disposition) based on the `filelike` response content. + """ + encoding_map = { + 'bzip2': 'application/x-bzip', + 'gzip': 'application/gzip', + 'xz': 'application/x-xz', + } + filename = getattr(filelike, 'name', None) + filename = filename if (isinstance(filename, str) and filename) else self.filename + if os.path.isabs(filename): + self['Content-Length'] = os.path.getsize(filelike.name) + elif hasattr(filelike, 'getbuffer'): + self['Content-Length'] = filelike.getbuffer().nbytes + + if self.get('Content-Type', '').startswith(settings.DEFAULT_CONTENT_TYPE): + if self.file_to_stream: + content_type, encoding = get_mimetype( + file_object=self.file_to_stream, mimetype_only=True + ) + # Encoding isn't set to prevent browsers from automatically + # uncompressing files. + content_type = encoding_map.get(encoding, content_type) + self['Content-Type'] = content_type or 'application/octet-stream' + else: + self['Content-Type'] = 'application/octet-stream' + + self._set_as_attachment(filename=filename) diff --git a/mayan/apps/common/compressed_files.py b/mayan/apps/common/compressed_files.py index 4bef477028..7d5eb13968 100644 --- a/mayan/apps/common/compressed_files.py +++ b/mayan/apps/common/compressed_files.py @@ -11,6 +11,7 @@ except ImportError: COMPRESSION = zipfile.ZIP_STORED from django.core.files.uploadedfile import SimpleUploadedFile +from django.utils.encoding import force_text from mayan.apps.mimetype.api import get_mimetype @@ -136,9 +137,34 @@ class ZipArchive(Archive): return self._archive.read(filename) def members(self): - return [ - filename for filename in self._archive.namelist() if not filename.endswith('/') - ] + results = [] + + for filename in self._archive.namelist(): + # Zip files only support UTF-8 and CP437 encodings. + # Attempt to decode CP437 to be able to check if it ends + # with a slash. + # Future improvement that violates the Zip format: + # Add chardet.detect to detect the most likely encoding + # if other than CP437. + try: + filename = filename.decode('CP437') + is_unicode = False + except AttributeError: + filename = force_text(filename) + is_unicode = True + except UnicodeEncodeError: + is_unicode = True + + if not filename.endswith('/'): + # Re encode in the original encoding + if not is_unicode: + filename = filename.encode( + encoding='CP437', errors='strict' + ) + + results.append(filename) + + return results def open_member(self, filename): return self._archive.open(filename) diff --git a/mayan/apps/common/dependencies.py b/mayan/apps/common/dependencies.py index 97bfb1b0d4..9b303ca443 100644 --- a/mayan/apps/common/dependencies.py +++ b/mayan/apps/common/dependencies.py @@ -3,10 +3,12 @@ from __future__ import absolute_import, unicode_literals from django.utils.translation import ugettext_lazy as _ from mayan.apps.dependencies.classes import ( - environment_build, environment_development, environment_testing, - PythonDependency + environment_build, environment_development, environment_documentation, + environment_testing, BinaryDependency, PythonDependency ) +from .literals import DEFAULT_FIREFOX_GECKODRIVER_PATH + PythonDependency( copyright_text=''' Copyright (c) Django Software Foundation and individual contributors. @@ -36,7 +38,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.24' + ''', module=__name__, name='django', version_string='==1.11.26' ) PythonDependency( copyright_text=''' @@ -59,103 +61,7 @@ PythonDependency( LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ''', module=__name__, name='PyYAML', version_string='==5.1.1' -) -PythonDependency( - copyright_text=''' - Copyright (c) 2015 Ask Solem & contributors. All rights reserved. - Copyright (c) 2012-2014 GoPivotal, Inc. All rights reserved. - Copyright (c) 2009, 2010, 2011, 2012 Ask Solem, and individual contributors. All rights reserved. - - Celery is licensed under The BSD License (3 Clause, also known as - the new BSD license). The license is an OSI approved Open Source - license and is GPL-compatible(1). - - The license text can also be found here: - http://www.opensource.org/licenses/BSD-3-Clause - - License - ======= - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Ask Solem, nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Ask Solem OR CONTRIBUTORS - BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON 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. - - Documentation License - ===================== - - The documentation portion of Celery (the rendered contents of the - "docs" directory of a software distribution or checkout) is supplied - under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 - United States License as described by - http://creativecommons.org/licenses/by-nc-sa/3.0/us/ - - Footnotes - ========= - (1) A GPL-compatible license makes it possible to - combine Celery with other software that is released - under the GPL, it does not mean that we're distributing - Celery under the GPL license. The BSD license, unlike the GPL, - let you distribute a modified version without making your - changes open source. - ''', module=__name__, name='celery', version_string='==3.1.24' -) -PythonDependency( - copyright_text=''' - Copyright (c) 2012-2013 GoPivotal, Inc. All Rights Reserved. - Copyright (c) 2009-2012 Ask Solem. All Rights Reserved. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of Ask Solem nor the names of its contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON 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-celery', version_string='==3.2.1' -) -PythonDependency( - module=__name__, name='django-downloadview', version_string='==1.9' -) -PythonDependency( - module=__name__, name='django-environ', version_string='==0.4.5' + ''', module=__name__, name='PyYAML', version_string='==5.1.2' ) PythonDependency( module=__name__, name='django-formtools', version_string='==2.1' @@ -318,7 +224,7 @@ PythonDependency( module=__name__, name='mock', version_string='==2.0.0' ) PythonDependency( - module=__name__, name='pathlib2', version_string='==2.3.4' + module=__name__, name='pathlib2', version_string='==2.3.5' ) PythonDependency( copyright_text=''' @@ -376,13 +282,19 @@ PythonDependency( ''', module=__name__, name='sh', version_string='==1.12.14' ) PythonDependency( - module=__name__, name='whitenoise', version_string='==4.1.2' + module=__name__, name='whitenoise', version_string='==4.1.4' ) +# Development + 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' @@ -399,12 +311,12 @@ PythonDependency( PythonDependency( environment=environment_development, help_text=_( 'Provides style checking.' - ), module=__name__, name='flake8', version_string='==3.7.7' + ), module=__name__, name='flake8', version_string='==3.7.9' ) PythonDependency( environment=environment_development, help_text=_( 'Command line environment with autocompletion.' - ), module=__name__, name='ipython', version_string='==5.5.0' + ), module=__name__, name='ipython', version_string='==5.8.0' ) PythonDependency( environment=environment_development, help_text=_( @@ -420,6 +332,13 @@ PythonDependency( module=__name__, name='transifex-client', version_string='==0.13.6' ) +# Testing + +BinaryDependency( + environment=environment_testing, label='firefox-geckodriver', + module=__name__, name='geckodriver', + path=DEFAULT_FIREFOX_GECKODRIVER_PATH +) PythonDependency( environment=environment_testing, module=__name__, name='codecov', version_string='==2.0.15' @@ -437,6 +356,10 @@ PythonDependency( module=__name__, name='django-test-without-migrations', version_string='==0.6' ) +PythonDependency( + environment=environment_testing, module=__name__, name='selenium', + version_string='==3.141.0' +) PythonDependency( environment=environment_testing, module=__name__, name='tox', version_string='==3.8.6' @@ -446,6 +369,8 @@ PythonDependency( version_string='==5.6.3' ) +# Build + PythonDependency( environment=environment_build, module=__name__, name='twine', version_string='==1.9.1' @@ -454,3 +379,41 @@ PythonDependency( environment=environment_build, module=__name__, name='wheel', version_string='==0.30.0' ) + +# Documentation + +PythonDependency( + environment=environment_documentation, module=__name__, name='Sphinx', + version_string='==1.8.5' +) +PythonDependency( + environment=environment_documentation, module=__name__, + name='sphinx-autobuild', + version_string='==0.7.1' +) +PythonDependency( + environment=environment_documentation, module=__name__, + name='sphinx-sitemap', + version_string='==1.0.2' +) +PythonDependency( + environment=environment_documentation, module=__name__, + name='sphinx_rtd_theme', + version_string='==0.4.3' +) +PythonDependency( + environment=environment_documentation, module=__name__, + name='sphinxcontrib-blockdiag', + version_string='==1.5.5' +) +PythonDependency( + environment=environment_documentation, module=__name__, + name='sphinxcontrib-spelling', + version_string='==4.2.1' +) +# sphinx-autobuild has a dependency on Tornado, +# but Tornado 6.0 dropped support for Python 2.7 +PythonDependency( + environment=environment_documentation, module=__name__, name='tornado', + version_string='<6.0' +) diff --git a/mayan/apps/common/forms.py b/mayan/apps/common/forms.py index 9a82560efb..5940805146 100644 --- a/mayan/apps/common/forms.py +++ b/mayan/apps/common/forms.py @@ -50,7 +50,7 @@ class FormOptions(object): determined in the following order: as passed via keyword arguments during form intialization, as form get_... method or finally as static Meta options. This is to allow a form with - Meta options or method to be overrided at initialization + Meta options or method to be overridden at initialization and increase the usability of a single class. """ for name, default_value in self.option_definitions.items(): @@ -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..129ecd3e3a 100644 --- a/mayan/apps/common/generics.py +++ b/mayan/apps/common/generics.py @@ -11,15 +11,13 @@ from django.utils.translation import ugettext_lazy as _ from django.views.generic import ( FormView as DjangoFormView, DetailView, TemplateView ) +from django.views.generic.base import View from django.views.generic.detail import SingleObjectMixin from django.views.generic.edit import ( CreateView, DeleteView, FormMixin, ModelFormMixin, UpdateView ) from django.views.generic.list import ListView -from django_downloadview import ( - TextIteratorIO, VirtualDownloadView, VirtualFile -) from pure_pagination.mixins import PaginationMixin from mayan.apps.acls.models import AccessControlList @@ -36,11 +34,10 @@ from .literals import ( TEXT_SORT_ORDER_VARIABLE_NAME ) from .mixins import ( - DeleteExtraDataMixin, DynamicFormViewMixin, ExternalObjectMixin, - ExtraContextMixin, FormExtraKwargsMixin, MultipleObjectMixin, - ObjectActionMixin, ObjectNameMixin, - ObjectPermissionCheckMixin, RedirectionMixin, RestrictedQuerysetMixin, - ViewPermissionCheckMixin + DeleteExtraDataMixin, DownloadMixin, DynamicFormViewMixin, + ExternalObjectMixin, ExtraContextMixin, FormExtraKwargsMixin, + MultipleObjectMixin, ObjectActionMixin, ObjectNameMixin, + RedirectionMixin, RestrictedQuerysetMixin, ViewPermissionCheckMixin ) from .settings import setting_paginate_by @@ -53,8 +50,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 +63,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 +95,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 +117,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 +205,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 +224,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 +347,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( @@ -487,7 +488,9 @@ class MultipleObjectConfirmActionView( class SimpleView(ViewPermissionCheckMixin, ExtraContextMixin, TemplateView): - pass + """ + Basic template view class with permission check and extra context + """ class SingleObjectCreateView( @@ -653,9 +656,52 @@ class SingleObjectDetailView( return super(SingleObjectDetailView, self).get_queryset() -class SingleObjectDownloadView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, VirtualDownloadView, SingleObjectMixin): - TextIteratorIO = TextIteratorIO - VirtualFile = VirtualFile +class BaseDownloadView(DownloadMixin, ViewPermissionCheckMixin, View): + def get(self, request, *args, **kwargs): + return self.render_to_response() + + +class SingleObjectDownloadView( + RestrictedQuerysetMixin, SingleObjectMixin, BaseDownloadView +): + def get(self, request, *args, **kwargs): + self.object = self.get_object() + return super(SingleObjectDownloadView, self).get( + request, *args, **kwargs + ) + + def get_download_file_object(self): + return self.object.open() + + def get_download_label(self): + return force_text(self.object) + + +class MultipleObjectDownloadView( + RestrictedQuerysetMixin, MultipleObjectMixin, BaseDownloadView +): + """ + View that support receiving multiple objects via a pk_list query. + """ + def __init__(self, *args, **kwargs): + result = super(MultipleObjectDownloadView, self).__init__(*args, **kwargs) + + if self.__class__.mro()[0].get_queryset != MultipleObjectDownloadView.get_queryset: + raise ImproperlyConfigured( + '%(cls)s is overloading the get_queryset method. Subclasses ' + 'should implement the get_source_queryset method instead. ' % { + 'cls': self.__class__.__name__ + } + ) + + return result + + def get_queryset(self): + try: + return super(MultipleObjectDownloadView, self).get_queryset() + except ImproperlyConfigured: + self.queryset = self.get_source_queryset() + return super(MultipleObjectDownloadView, self).get_queryset() class SingleObjectDynamicFormCreateView( 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 fc72d63d70..65df6c45f6 100644 --- a/mayan/apps/common/icons.py +++ b/mayan/apps/common/icons.py @@ -11,6 +11,7 @@ icon_add_all = Icon( ) icon_assign_remove_add = Icon(driver_name='fontawesome', symbol='plus') icon_assign_remove_remove = Icon(driver_name='fontawesome', symbol='minus') +icon_book = Icon(driver_name='fontawesome', symbol='book') icon_confirm_form_submit = Icon(driver_name='fontawesome', symbol='check') icon_confirm_form_cancel = Icon(driver_name='fontawesome', symbol='times') icon_current_user_locale_profile_details = Icon( @@ -35,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 25a74bf903..46b4328400 100644 --- a/mayan/apps/common/links.py +++ b/mayan/apps/common/links.py @@ -6,10 +6,10 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.navigation.classes import Link from .icons import ( - icon_about, icon_current_user_locale_profile_details, + 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 @@ -35,6 +35,10 @@ def get_kwargs_factory(variable_name): link_about = Link( icon_class=icon_about, text=_('About this'), view='common:about_view' ) +link_book = Link( + icon_class=icon_book, tags='new_window', text=_('Get the book'), + url='https://mayan-edms.com/book/' +) link_current_user_locale_profile_details = Link( icon_class=icon_current_user_locale_profile_details, text=_('Locale profile'), @@ -50,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/literals.py b/mayan/apps/common/literals.py index 5ca8996a5d..f64777717e 100644 --- a/mayan/apps/common/literals.py +++ b/mayan/apps/common/literals.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ DEFAULT_COMMON_HOME_VIEW = 'common:home' +DEFAULT_FIREFOX_GECKODRIVER_PATH = '/usr/bin/geckodriver' DELETE_STALE_UPLOADS_INTERVAL = 60 * 10 # 10 minutes DJANGO_SQLITE_BACKEND = 'django.db.backends.sqlite3' diff --git a/mayan/apps/common/locale/ar/LC_MESSAGES/django.mo b/mayan/apps/common/locale/ar/LC_MESSAGES/django.mo index d23c806bc6..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 bc81dc1529..84eb60fe3e 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -54,67 +54,67 @@ msgstr "الاختيار" msgid "None" msgstr "لا شيء" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "إضافة" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "إزالة" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -123,23 +123,27 @@ msgstr "" msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -147,7 +151,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "License" @@ -163,56 +167,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Days" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Hours" -#: literals.py:36 +#: literals.py:37 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 "" @@ -229,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Object" @@ -250,7 +231,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -310,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 " @@ -328,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 " @@ -336,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 b59d522561..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 0f56ed8799..2b682eadec 100644 --- a/mayan/apps/common/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/bg/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 # Pavlin Koldamov , 2012 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,208 +19,189 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:89 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" -msgstr "" +msgstr "Обобщение" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" -msgstr "" +msgstr "Налични характеристики: \n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" -msgstr "" +msgstr "Налични полета: \n" -#: dependencies.py:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." -msgstr "" +msgstr "Използва се за разрешаване на офлайн превод на текстови низове в код." -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." -msgstr "" +msgstr "Осигурява проверка на стила." -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." -msgstr "" +msgstr "Команден ред с автоматично довършване." -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." -msgstr "" +msgstr "Проверява правилното форматиране на файла README." #: forms.py:27 msgid "Selection" -msgstr "" +msgstr "Избиране" #: forms.py:103 msgid "None" msgstr "Няма" -#: generics.py:149 +#: generics.py:148 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 "" +msgstr "Изберете записи, които ще бъдат премахнати. Задръжте Control, за да изберете няколко записа. След като избирането приключи, щракнете върху бутона по-долу или щракнете двукратно върху списъка, за да активирате действието." -#: generics.py:154 +#: generics.py:153 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 "" +msgstr "Изберете записи за добавяне. Задръжте Control, за да изберете няколко записа. След като избирането приключи, щракнете върху бутона по-долу или щракнете двукратно върху списъка, за да активирате действието." -#: generics.py:287 +#: generics.py:286 msgid "Add all" -msgstr "" +msgstr "Добавете всички" -#: generics.py:296 +#: generics.py:295 msgid "Add" -msgstr "Добави" +msgstr "Добавете" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" -msgstr "" +msgstr "Премахнете всички" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Премахнете" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" -msgstr "" +msgstr "Грешка в дублиращи данни: %(error)s" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" -msgstr "" +msgstr "%(object)s не е създаден, грешка: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." -msgstr "" +msgstr "%(object)s е създаден успешно." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." -msgstr "" +msgstr "%(object)s не е изтрит, грешка: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." -msgstr "" +msgstr "%(object)s изтрит успешно." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." -msgstr "" +msgstr "%(object)s не е актуализиран, грешка: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." -msgstr "" +msgstr "%(object)s актуализиран успешно." #: links.py:36 msgid "About this" -msgstr "" +msgstr "Относно това" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "Вземете книгата" + +#: links.py:44 msgid "Locale profile" -msgstr "" +msgstr "Локален профил" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" -msgstr "" +msgstr "Редактиране на локален профил" -#: links.py:50 +#: links.py:54 msgid "Documentation" -msgstr "" - -#: links.py:54 links.py:65 -msgid "Errors" -msgstr "" +msgstr "Документация" #: links.py:59 +msgid "Errors" +msgstr "Грешки" + +#: links.py:65 msgid "Clear all" -msgstr "" +msgstr "Изчисти всичко" #: links.py:69 msgid "Forum" -msgstr "" +msgstr "Форум" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Лиценз" #: links.py:76 msgid "Setup" -msgstr "" +msgstr "Настройка" #: links.py:79 msgid "Source code" -msgstr "" +msgstr "Изходен код" #: links.py:83 msgid "Support" -msgstr "" +msgstr "Поддръжка" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" -msgstr "" +msgstr "Инструменти" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." -msgstr "" +msgstr "Тази функция е оттеглена и ще бъде премахната в бъдеща версия." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." -msgstr "" +msgstr "Вашата база данни е настроена да използва SQLite. SQLite трябва да се използва само за разработка и тестване, а не за производство." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Дни" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Часове" -#: literals.py:36 +#: literals.py:37 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 "" +msgstr "Система" #: menus.py:12 menus.py:13 msgid "Facet" -msgstr "" +msgstr "Аспект" #: menus.py:16 msgid "Actions" @@ -227,40 +209,40 @@ msgstr "Действия" #: menus.py:17 msgid "Secondary" -msgstr "" +msgstr "Допълнително" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" msgstr "Потребител" -#: mixins.py:222 +#: mixins.py:292 #, python-format msgid "No %(verbose_name)s found matching the query" -msgstr "" +msgstr "Не е намерен %(verbose_name)s, отговарящ на заявката" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Обект" #: models.py:28 msgid "Namespace" -msgstr "" +msgstr "Именно пространство" #: models.py:39 models.py:63 msgid "Date time" -msgstr "" +msgstr "Дата час" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" -msgstr "" +msgstr "Резултат" #: models.py:47 msgid "Error log entry" -msgstr "" +msgstr "Запис в дневника за грешки" #: models.py:48 msgid "Error log entries" -msgstr "" +msgstr "Записи в дневника за грешки" #: models.py:59 msgid "File" @@ -272,31 +254,31 @@ msgstr "Име на файл" #: models.py:67 msgid "Shared uploaded file" -msgstr "" +msgstr "Споделен качен файл" #: models.py:68 msgid "Shared uploaded files" -msgstr "" +msgstr "Споделени качени файлове" #: models.py:97 msgid "Timezone" -msgstr "" +msgstr "Часова зона" #: models.py:100 msgid "Language" -msgstr "" +msgstr "Език" #: models.py:106 msgid "User locale profile" -msgstr "" +msgstr "Профил на местоположението на потребителя" #: models.py:107 msgid "User locale profiles" -msgstr "" +msgstr "Профили на местоположението на потребителя" #: permissions_runtime.py:10 msgid "View error log" -msgstr "" +msgstr "Преглед на дневника за грешки" #: queues.py:13 msgid "Default" @@ -304,402 +286,171 @@ msgstr "По подразбиране" #: queues.py:17 msgid "Common periodic" -msgstr "" +msgstr "Обща периодичност" #: queues.py:22 msgid "Delete stale uploads" -msgstr "" +msgstr "Изтриване на застояли качвания" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." -msgstr "" +msgstr "Автоматично активиране на регистрацията във всички приложения." -#: settings.py:25 +#: settings.py:28 msgid "" "Time to delay background tasks that depend on a database commit to " "propagate." -msgstr "" +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 " "Python path to: an application configuration class (preferred), or a package" " containing an application." -msgstr "" +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 " "Python path to: an application configuration class (preferred), or a package" " containing an application." -msgstr "" +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 "" +msgstr "Име на изгледа, прикрепен към котвата на марката в главното меню. Това е и изгледът, към който потребителите ще бъдат пренасочени след влизане." -#: settings.py:61 +#: settings.py:64 msgid "The number objects that will be displayed per page." -msgstr "" +msgstr "Брой на обектите, които ще бъдат показани на страница." -#: settings.py:68 +#: settings.py:71 msgid "Enable error logging outside of the system error logging capabilities." -msgstr "" +msgstr "Активирайте регистрирането на грешки извън възможностите за регистриране на грешки в системата." -#: settings.py:75 +#: settings.py:78 msgid "Path to the logfile that will track errors during production." -msgstr "" +msgstr "Път към файла на дневника, който ще проследява грешките по време на производството." -#: settings.py:82 +#: settings.py:85 msgid "Name to be displayed in the main menu." -msgstr "" +msgstr "Име, което се показва в главното меню." -#: settings.py:88 +#: settings.py:91 msgid "URL of the installation or homepage of the project." -msgstr "" +msgstr "URL адрес на инсталацията или началната страница на проекта." -#: settings.py:94 +#: settings.py:97 msgid "A storage backend that all workers can use to share files." -msgstr "" +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 "" +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 "" +msgstr "Подробности за: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" -msgstr "" +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 "" +msgstr "Въведете валидно „вътрешно име“, състоящо се от букви, цифри и подчертавания." -#: views.py:31 +#: views.py:27 msgid "About" -msgstr "" +msgstr "Относно" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" -msgstr "" +msgstr "Данни от текущия локален потребителски профил " -#: views.py:50 +#: views.py:46 msgid "Edit current user locale profile details" -msgstr "" +msgstr "Редактиране на данни за текущия локален потребителски профил" -#: views.py:100 +#: views.py:96 msgid "Dashboard" -msgstr "" +msgstr "Контролно табло" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" -msgstr "" +msgstr "Изчистване на записите в дневника за грешки за: %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" -msgstr "" +msgstr "Дневникът за грешки в обекта е изчистен успешно" -#: views.py:154 +#: views.py:150 msgid "Date and time" -msgstr "" +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 "" +msgstr "Записи в дневника за грешки за: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." -msgstr "" +msgstr "Няма опции за настройка." -#: views.py:189 +#: views.py:193 msgid "" "No results here means that don't have the required permissions to perform " "administrative task." -msgstr "" +msgstr "Липса на резултати тук означава, че нямате необходимите разрешения за изпълнение на административна задача." -#: views.py:195 +#: views.py:199 msgid "Setup items" -msgstr "" +msgstr "Елементи за настройка" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." -msgstr "" +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 "" +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 196fc7a43b..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 b50b6c5247..93c27a559d 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -55,67 +55,67 @@ msgstr "Odabir" msgid "None" msgstr "Nijedno" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Dodati" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Ukloniti" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nije kreiran, greška:%(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s kreiran uspešno." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s nije izbrisan, greška:%(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s izbrisan uspešno." -#: generics.py:697 +#: generics.py:743 #, 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:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s ažuriran uspešno." @@ -124,23 +124,27 @@ msgstr "%(object)s ažuriran uspešno." msgid "About this" msgstr "O ovome" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Lokalni profil" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Uredi lokalni profil" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Dokumentacija" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Greške" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Izbriši sve" @@ -148,7 +152,7 @@ msgstr "Izbriši sve" msgid "Forum" msgstr "Forum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licence" @@ -164,56 +168,33 @@ msgstr "Izvorni kod" msgid "Support" msgstr "Podrška" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Alati" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "Backend baze podataka je podešeno da koristi SKLite. SKLite treba koristiti samo za razvoj i testiranje, a ne za proizvodnju." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Dana" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Sati" -#: literals.py:36 +#: literals.py:37 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" @@ -230,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Objekat" @@ -251,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" @@ -311,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 " @@ -329,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 " @@ -337,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 b6b67d3e15..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 92b08ccf15..02cddba281 100644 --- a/mayan/apps/common/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/cs/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -17,289 +18,270 @@ 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:89 permissions_runtime.py:7 settings.py:14 +#: apps.py:86 permissions_runtime.py:7 settings.py:15 msgid "Common" -msgstr "" +msgstr "Společný" -#: classes.py:126 +#: classes.py:85 msgid "Available attributes: \n" -msgstr "" +msgstr "Dostupné atributy:\n" -#: classes.py:166 +#: classes.py:125 msgid "Available fields: \n" -msgstr "" +msgstr "Dostupná pole:\n" -#: dependencies.py:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." -msgstr "" +msgstr "Poskytuje kontrolu stylu." -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." -msgstr "" +msgstr "Prostředí příkazového řádku s automatickým dokončováním." -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." -msgstr "" +msgstr "Zkontroluje správné formátování souboru README." #: forms.py:27 msgid "Selection" -msgstr "" +msgstr "Výběr" #: forms.py:103 msgid "None" -msgstr "" +msgstr "žádný" -#: generics.py:149 +#: generics.py:148 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 "" +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:153 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 "" +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:286 msgid "Add all" -msgstr "" +msgstr "Přidat vše" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Přidat" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" -msgstr "" +msgstr "Odebrat vše" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Odstranit" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" -msgstr "" +msgstr "Chyba duplicitních dat: %(error)s" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" -msgstr "" +msgstr "%(object)s nebyl vytvořen, chyba: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." -msgstr "" +msgstr "%(object)s byl úspěšně vytvořen." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." -msgstr "" +msgstr "%(object)s nebyl smazán, chyba: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." -msgstr "" +msgstr "%(object)s byl úspěšně smazán." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." -msgstr "" +msgstr "%(object)s nebyl aktualizován, chyba: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." -msgstr "" +msgstr "%(object)s byl úspěšně aktualizován." #: links.py:36 msgid "About this" +msgstr "O tom" + +#: links.py:39 +msgid "Get the book" msgstr "" -#: links.py:40 +#: links.py:44 msgid "Locale profile" -msgstr "" +msgstr "Profil národního prostředí" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" -msgstr "" +msgstr "Upravit místní nastavení" -#: links.py:50 +#: links.py:54 msgid "Documentation" -msgstr "" - -#: links.py:54 links.py:65 -msgid "Errors" -msgstr "" +msgstr "Dokumentace" #: links.py:59 +msgid "Errors" +msgstr "Chyby" + +#: links.py:65 msgid "Clear all" -msgstr "" +msgstr "Vymazat vše" #: links.py:69 msgid "Forum" -msgstr "" +msgstr "Forum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" -msgstr "" +msgstr "Licence" #: links.py:76 msgid "Setup" -msgstr "" +msgstr "Instalace" #: links.py:79 msgid "Source code" -msgstr "" +msgstr "Zdrojový kód" #: links.py:83 msgid "Support" -msgstr "" +msgstr "Podpora" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" -msgstr "" +msgstr "Nástroje" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." -msgstr "" +msgstr "Tato funkce byla ukončena a v budoucí verzi bude odstraněna." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." -msgstr "" - -#: literals.py:34 -msgid "Days" -msgstr "" +msgstr "Backend vaší databáze je nastaven na použití SQLite. SQLite by se měl používat pouze pro vývoj a testování, nikoli pro produkční prostředí." #: literals.py:35 -msgid "Hours" -msgstr "" +msgid "Days" +msgstr "Dny" #: literals.py:36 +msgid "Hours" +msgstr "Hodiny" + +#: literals.py:37 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 "" +msgstr "Minuty" #: menus.py:10 msgid "System" -msgstr "" +msgstr "Systém" #: menus.py:12 menus.py:13 msgid "Facet" -msgstr "" +msgstr "Aspekt" #: menus.py:16 msgid "Actions" -msgstr "" +msgstr "Akce" #: menus.py:17 msgid "Secondary" -msgstr "" +msgstr "Sekundární" -#: menus.py:21 models.py:93 +#: menus.py:22 models.py:93 msgid "User" -msgstr "" +msgstr "Uživatel" -#: mixins.py:222 +#: mixins.py:292 #, python-format msgid "No %(verbose_name)s found matching the query" -msgstr "" +msgstr "Nebyl nalezen žádný dotaz %(verbose_name)s" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" -msgstr "" +msgstr "Objekt" #: models.py:28 msgid "Namespace" -msgstr "" +msgstr "Jmenný prostor" #: models.py:39 models.py:63 msgid "Date time" -msgstr "" +msgstr "Datum a čas" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" -msgstr "" +msgstr "Výsledek" #: models.py:47 msgid "Error log entry" -msgstr "" +msgstr "Položka protokolu chyb" #: models.py:48 msgid "Error log entries" -msgstr "" +msgstr "Chybové položky protokolu" #: models.py:59 msgid "File" -msgstr "" +msgstr "Soubor" #: models.py:61 msgid "Filename" -msgstr "" +msgstr "Název souboru" #: models.py:67 msgid "Shared uploaded file" -msgstr "" +msgstr "Sdílený nahraný soubor" #: models.py:68 msgid "Shared uploaded files" -msgstr "" +msgstr "Sdílené nahrané soubory" #: models.py:97 msgid "Timezone" -msgstr "" +msgstr "Časové pásmo" #: models.py:100 msgid "Language" -msgstr "" +msgstr "Jazyk" #: models.py:106 msgid "User locale profile" -msgstr "" +msgstr "Profil místního uživatele" #: models.py:107 msgid "User locale profiles" -msgstr "" +msgstr "Profily národního prostředí uživatele" #: permissions_runtime.py:10 msgid "View error log" -msgstr "" +msgstr "Zobrazit protokol chyb" #: queues.py:13 msgid "Default" -msgstr "" +msgstr "Výchozí" #: queues.py:17 msgid "Common periodic" @@ -307,398 +289,167 @@ msgstr "" #: queues.py:22 msgid "Delete stale uploads" -msgstr "" +msgstr "Odstraňte zastaralá nahrávání" -#: settings.py:19 +#: settings.py:22 msgid "Automatically enable logging to all apps." -msgstr "" +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 "" +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 " "Python path to: an application configuration class (preferred), or a package" " containing an application." -msgstr "" +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 " "Python path to: an application configuration class (preferred), or a package" " containing an application." -msgstr "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +msgstr "Úložiště, které všichni pracovníci mohou použít ke sdílení souborů." -#: 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 "" +msgstr "Potvrďte smazání" -#: templatetags/common_tags.py:36 +#: templatetags/common_tags.py:33 #, python-format msgid "Edit %s" -msgstr "" +msgstr "Upravit %s" -#: templatetags/common_tags.py:39 +#: templatetags/common_tags.py:36 msgid "Confirm" -msgstr "" +msgstr "Potvrdit" -#: templatetags/common_tags.py:43 +#: templatetags/common_tags.py:40 #, python-format msgid "Details for: %s" -msgstr "" +msgstr "Podrobnosti pro: %s" -#: templatetags/common_tags.py:47 +#: templatetags/common_tags.py:44 #, python-format msgid "Edit: %s" -msgstr "" +msgstr "Upravit: %s" -#: templatetags/common_tags.py:50 +#: templatetags/common_tags.py:47 msgid "Create" +msgstr "Vytvořit" + +#: validators.py:46 +msgid "Enter a valid JSON value." msgstr "" -#: validators.py:29 +#: 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 "" +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 "" +msgstr "O" -#: views.py:44 +#: views.py:40 msgid "Current user locale profile details" -msgstr "" +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 "" +msgstr "Upravit podrobnosti o aktuálním místním profilu uživatele" -#: views.py:100 +#: views.py:96 msgid "Dashboard" -msgstr "" +msgstr "Řídící panel" -#: views.py:118 +#: views.py:114 #, python-format msgid "Clear error log entries for: %s" -msgstr "" +msgstr "Vymažte položky protokolu chyb pro: %s" -#: views.py:135 +#: views.py:131 msgid "Object error log cleared successfully" -msgstr "" +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:156 +msgid "" +"This view displays the error log of different object. An empty list is a " +"good thing." msgstr "" -#: views.py:159 +#: views.py:160 +msgid "There are no error log entries" +msgstr "" + +#: views.py:163 #, python-format msgid "Error log entries for: %s" -msgstr "" +msgstr "Položky protokolu chyb pro: %s" -#: views.py:187 +#: views.py:191 msgid "No setup options available." -msgstr "" +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 "" +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 "" +msgstr "Položky nastavení" -#: views.py:197 +#: views.py:201 msgid "Here you can configure all aspects of the system." -msgstr "" +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 "" - -#: views.py:240 -msgid "No action selected." -msgstr "" - -#: views.py:250 -msgid "Must select at least one item." -msgstr "" +msgstr "Tyto moduly se používají k údržbě systému." 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 d7e0823839..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 608e030448..168cd13ad3 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "" msgid "None" msgstr "Ingen" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Tilføj" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Fjern" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -122,23 +122,27 @@ msgstr "" msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -146,7 +150,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "" @@ -162,56 +166,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "" -#: literals.py:36 +#: literals.py:37 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 "" @@ -228,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "" @@ -249,7 +230,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Resultat" @@ -309,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 " @@ -327,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 " @@ -335,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 5648c90e2b..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 5b3b47a785..0351fd86c5 100644 --- a/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/common/locale/de_DE/LC_MESSAGES/django.po @@ -7,6 +7,7 @@ # Bjoern Kowarsch , 2018 # Felix , 2018 # Jesaja Everling , 2017 +# Marvin Haschker , 2019 # Mathias Behrle , 2018-2019 # Mathias Behrle , 2014 # Robin Schubert , 2019 @@ -16,9 +17,9 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -26,31 +27,31 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "Ermöglicht die Offline Übersetzung von Zeichenketten im Code." -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "Ermöglicht Stilüberprüfung." -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "Kommandozeilenumgebung mit Autovervollständigung." -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "Überprüft die korrekte Formatierung der README-Datei." @@ -62,67 +63,67 @@ msgstr "Auswahl" msgid "None" msgstr "Keine" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "Alle hinzufügen" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Hinzufügen" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "Alle entfernen" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Entfernen" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Duplizierte Daten Fehler: %(error)s" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nicht erstellt, Fehler: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s erfolgreich erstellt." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s nicht gelöscht, Fehler: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s erfolgreich gelöscht." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s nicht aktualisiert, Fehler: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s erfolgreich aktualisiert." @@ -131,23 +132,27 @@ msgstr "%(object)s erfolgreich aktualisiert." msgid "About this" msgstr "Über Mayan" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Lokalisierungsprofil" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Lokalisierungsprofil bearbeiten" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Dokumentation" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Fehler" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Alles löschen" @@ -155,7 +160,7 @@ msgstr "Alles löschen" msgid "Forum" msgstr "Forum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Lizenz" @@ -171,56 +176,33 @@ msgstr "Quelltext" msgid "Support" msgstr "Hilfe" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Werkzeuge" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "Diese Funktion ist veraltet und wird in einer zukünftigen Version entfernt." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "Sie benutzen SQLite als Datenbank-Backend. SQLite sollte nur für Entwicklungs- und Testzwecke verwendet werden, jedoch nicht in Produktivumgebungen." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Tage" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Stunden" -#: literals.py:36 +#: literals.py:37 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" @@ -237,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:292 #, 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:367 msgid "Object" msgstr "Objekt" @@ -258,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" @@ -318,396 +300,165 @@ 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 " "Python path to: an application configuration class (preferred), or a package" " containing an application." -msgstr "" +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 " "Python path to: an application configuration class (preferred), or a package" " containing an application." -msgstr "" +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 "" +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 "" - -#: 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 4f87852ea3..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 debf1ee799..2849559c08 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "Επιλογή" msgid "None" msgstr "Κανένα" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Προσθήκη" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Αφαίρεση" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s δεν δημιουργήθηκε, σφάλμα: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s δημιουργήθηκε επιτυχώς." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s δεν διαγράφηκε, σφάλμα: %(error)s" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s διαγράφηκε επιτυχώς." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s δεν ενημερώθηκε,σφάλμα: %(error)s" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s ενημερώθηκε επιτυχώς." @@ -122,23 +122,27 @@ msgstr "%(object)s ενημερώθηκε επιτυχώς." msgid "About this" msgstr "Σχετικά με αυτό" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Προφίλ τοποθεσίας" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Τοποποίηση του προφίλ τοποθεσίας" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Τεκμηρίωση" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Σφάλματα" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -146,7 +150,7 @@ msgstr "" msgid "Forum" msgstr "Φόρουμ" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Άδεια χρήσης" @@ -162,56 +166,33 @@ msgstr "Πηγαιος κώδικας" msgid "Support" msgstr "Υποστήριξη" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Εργαλεία" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Ημέρες" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Ώρες" -#: literals.py:36 +#: literals.py:37 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 "Σύστημα" @@ -228,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Αντικείμενο" @@ -249,7 +230,7 @@ msgstr "" msgid "Date time" msgstr "Ηερομηνία ώρα" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Αποτέλεσμα" @@ -309,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 " @@ -327,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 " @@ -335,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 bb18fb2af0..34145f08a2 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "" msgid "None" msgstr "" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -122,23 +122,27 @@ msgstr "" msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -146,7 +150,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "" @@ -162,56 +166,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "" -#: literals.py:36 +#: literals.py:37 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 "" @@ -228,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "" @@ -249,7 +230,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -309,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 " @@ -326,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 " @@ -334,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 3f2b97d99b..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 bd21ebdba0..1d569a6dfd 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-07-05 06:48+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 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:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "Proporciona la comprobación de estilo." -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "Entorno de línea de comandos con autocompletado." -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "Añadir todo" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Agregar" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "Eliminar todo" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Eliminar" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Error de datos duplicados: %(error)s" -#: generics.py:543 +#: generics.py:546 #, 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:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s creado exitosamente." -#: generics.py:595 +#: generics.py:598 #, 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:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s borrado exitosamente." -#: generics.py:697 +#: generics.py:743 #, 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:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s actualizado exitosamente." @@ -126,23 +126,27 @@ msgstr "%(object)s actualizado exitosamente." msgid "About this" msgstr "Sobre esto" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "Consigue el libro" + +#: links.py:44 msgid "Locale profile" msgstr "Perfil de localización" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Editar perfil de localización" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Documentación" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Errores" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Limpiar todo" @@ -150,7 +154,7 @@ msgstr "Limpiar todo" msgid "Forum" msgstr "Foro" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licencia" @@ -166,56 +170,33 @@ msgstr "Código fuente" msgid "Support" msgstr "Apoyo técnico" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Herramientas" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "Esta función ha quedado en desuso y se eliminará en una versión futura." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "El backend de su base de datos está configurado para usar SQLite. SQLite solo debe usarse para desarrollo y pruebas, no para producción." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Días" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Horas" -#: literals.py:36 +#: literals.py:37 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" @@ -232,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:292 #, 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:367 msgid "Object" msgstr "Objeto" @@ -253,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" @@ -313,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 " @@ -331,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 " @@ -339,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 18db48fa26..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 21c6f54d43..2dac73ff29 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -55,67 +55,67 @@ msgstr "انتخاب" msgid "None" msgstr "هیچ یک" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "افزودن" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "حذف" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s ایجاد نشد، خطا: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s با موفقیت ایجاد شد" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s حذف نشده است، خطا: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s با موفقیت حذف شد" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s به روز نشده، خطا: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s با موفقیت به روز شد" @@ -124,23 +124,27 @@ msgstr "%(object)s با موفقیت به روز شد" msgid "About this" msgstr "در مورد این" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "پروفایل محلی" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "ویرایش پروفایل محلی" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "مستندات" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "خطاها" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -148,7 +152,7 @@ msgstr "" msgid "Forum" msgstr "انجمن" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "لیسانس" @@ -164,56 +168,33 @@ msgstr "کد منبع" msgid "Support" msgstr "حمایت کردن" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "ابزار" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "روزها" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "ساعات" -#: literals.py:36 +#: literals.py:37 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 "سیستم" @@ -230,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "شیئ" @@ -251,7 +232,7 @@ msgstr "فضای نام" msgid "Date time" msgstr "تاریخ زمان" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "جواب" @@ -311,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 " @@ -329,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 " @@ -337,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 cc5acee624..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 51647ad182..f047b2e374 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-08-22 13:52+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 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:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "Fournit une vérification de style." -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "Environnement de ligne de commande avec autocomplétion." -#: dependencies.py:411 +#: dependencies.py:323 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:148 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 "" +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:153 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 "" +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:286 msgid "Add all" msgstr "Ajouter tout" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Ajouter" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "Retirer tout" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Retirer" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Erreur de données en double: %(error)s" -#: generics.py:543 +#: generics.py:546 #, 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:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s créé avec succès." -#: generics.py:595 +#: generics.py:598 #, 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:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s supprimé avec succès." -#: generics.py:697 +#: generics.py:743 #, 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:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s mis à jour avec succès." @@ -131,23 +132,27 @@ msgstr "%(object)s mis à jour avec succès." msgid "About this" msgstr "À propos de" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "Obtenez le livre" + +#: links.py:44 msgid "Locale profile" msgstr "Paramètres régionaux du profil" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Éditer les paramètres régionaux du profil" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Documentation" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Erreurs" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Effacer tout" @@ -155,7 +160,7 @@ msgstr "Effacer tout" msgid "Forum" msgstr "Forum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licence" @@ -171,63 +176,40 @@ msgstr "Code source" msgid "Support" msgstr "Support" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Outils" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." -msgstr "" +msgstr "Cette fonctionnalité n'est plus utilisée et sera supprimée dans une version ultérieure." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "Votre serveur de base de données est configuré pour utiliser SQLite. SQLite ne devrait être utilisé qu'à des fins de développement et de test, pas en production." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Jours" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Heures" -#: literals.py:36 +#: literals.py:37 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 "Système" #: menus.py:12 menus.py:13 msgid "Facet" -msgstr "" +msgstr "Facette" #: menus.py:16 msgid "Actions" @@ -237,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:292 #, 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:367 msgid "Object" msgstr "Objet" @@ -258,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" @@ -318,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 " @@ -336,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 " @@ -344,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 "" +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 b2c0ff9d06..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 2d00fdc897..d833995735 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Levétel" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -123,23 +123,27 @@ msgstr "" msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -147,7 +151,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "" @@ -163,56 +167,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Eszköz" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Napok" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Órák" -#: literals.py:36 +#: literals.py:37 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 "" @@ -229,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "" @@ -250,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" @@ -310,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 " @@ -328,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 " @@ -336,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 bafbc9c3d4..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 7637c81b4a..f62913c864 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "" msgid "None" msgstr "Nihil" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "tambah" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "hapus" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -122,23 +122,27 @@ msgstr "" msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Profil lokl" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "edit profil lokal" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -146,7 +150,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Lisensi" @@ -162,56 +166,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "" -#: literals.py:36 +#: literals.py:37 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 "" @@ -228,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "" @@ -249,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 "" @@ -309,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 " @@ -327,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 " @@ -335,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 9af94a3266..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 4fa40a5879..fd30baac6a 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 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:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "Ambiente a riga di comando con autocompletamento." -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "Aggiungi tutto" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Aggiungi" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "Rimuovi tutto" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Rimuovi" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Errore dati duplicati: %(error)s" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s non creato, errore: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s creato con successo.." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s non cancellato, errore: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s cancellato con successo.." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s non aggiornato, errore: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s aggiornato con successo." @@ -128,23 +128,27 @@ msgstr "%(object)s aggiornato con successo." msgid "About this" msgstr "A questo proposito" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Profilo Locale" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Modifica profilo locale" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Documentazione" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Errori" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Pulisci tutto" @@ -152,7 +156,7 @@ msgstr "Pulisci tutto" msgid "Forum" msgstr "Forum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licenza" @@ -168,56 +172,33 @@ msgstr "Codice sorgente" msgid "Support" msgstr "Supporto" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Strumenti" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "Questa funzionalità è obsoleta e verrà rimossa nelle versioni future." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "Il tuo database attuale è impostato a SQLite, che dovrebbe essere usato solo per sviluppo e test, non in produzione." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Giorni" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Orario" -#: literals.py:36 +#: literals.py:37 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" @@ -234,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:292 #, 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:367 msgid "Object" msgstr "Oggetto" @@ -255,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" @@ -315,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 " @@ -333,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 " @@ -341,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 c233b4ec11..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 142a431d38..a159e9a926 100644 --- a/mayan/apps/common/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/common/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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-07-01 05:47+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "Izmantots, lai atļautu koda teksta virkņu bezsaistes tulkojumu." -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "Nodrošina stila pārbaudi." -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "Komandrindas vide ar automātisko aizpildi." -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "Pievienot visus" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Pievienot" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "Noņemt visus" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Noņemt" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Datu kopijas kļūda: %(error)s" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nav izveidots, kļūda: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s izveidots veiksmīgi." -#: generics.py:595 +#: generics.py:598 #, 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:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s veiksmīgi izdzēsts." -#: generics.py:697 +#: generics.py:743 #, 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:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s veiksmīgi atjaunināts." @@ -123,23 +123,27 @@ msgstr "%(object)s veiksmīgi atjaunināts." msgid "About this" msgstr "Par šo" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "Iegūstiet grāmatu" + +#: links.py:44 msgid "Locale profile" msgstr "Lokalizācijas profils" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Rediģēt lokalizācijas profilu" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Dokumentācija" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Kļūdas" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Iztīrīt visu" @@ -147,7 +151,7 @@ msgstr "Iztīrīt visu" msgid "Forum" msgstr "Forums" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licence" @@ -163,56 +167,33 @@ msgstr "Pirmkods" msgid "Support" msgstr "Atbalsts" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Rīki" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "Šī funkcija ir novecojusi un tiks noņemta turpmākajā versijā." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "Jūsu datubāzes backend ir iestatīts, lai izmantotu SQLite. SQLite jāizmanto tikai izstrādei un testēšanai, nevis ražošanai." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Dienas" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Stundas" -#: literals.py:36 +#: literals.py:37 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" @@ -229,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:292 #, 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:367 msgid "Object" msgstr "Objekts" @@ -250,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" @@ -310,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 " @@ -328,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 " @@ -336,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 9ff8eae3aa..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 e79b2c68ee..4952542b93 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -56,67 +56,67 @@ msgstr "Selectie" msgid "None" msgstr "Geen" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Voeg toe" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Verwijder" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s niet aangemaakt, foutmelding: %(error)s." -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s succesvol aangemaakt." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s niet verwijderd, foutmelding: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s succesbol verwijderd." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s niet geupdate, foutmelding: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s werden succesvol geupdate." @@ -125,23 +125,27 @@ msgstr "%(object)s werden succesvol geupdate." msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Landsinstellingen" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Wijzig landsinstellingen" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -149,7 +153,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licentie" @@ -165,56 +169,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Gereedschappen" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Dagen" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Uren" -#: literals.py:36 +#: literals.py:37 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 "" @@ -231,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Object" @@ -252,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" @@ -312,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 " @@ -330,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 " @@ -338,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 9868a9c2cb..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 85ca0fecb1..11de7b4a70 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-09-23 10:05+0000\n" -"Last-Translator: Tomasz Szymanowicz \n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 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:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "Zapewnia kontrolę stylu." -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "Środowisko wiersza poleceń z funkcją autouzupełniania." -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "Dodaj wszystko" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Dodaj" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "Usuń wszystko" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Usuń" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Błąd powielenia danych: %(error)s" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s nie utworzono, błąd: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s utworzono pomyślnie." -#: generics.py:595 +#: generics.py:598 #, 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:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s usunięto pomyślnie." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s nie zaktualizowano, błąd: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s zaktualizowano pomyślnie." @@ -131,23 +131,27 @@ msgstr "%(object)s zaktualizowano pomyślnie." msgid "About this" msgstr "O programie" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Profil regionalny" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Edycja ustawień regionalnych" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Dokumentacja" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Błędy" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Wyczyść wszystko" @@ -155,7 +159,7 @@ msgstr "Wyczyść wszystko" msgid "Forum" msgstr "Forum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licencja" @@ -171,56 +175,33 @@ msgstr "Kod źródłowy" msgid "Support" msgstr "Wsparcie" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Narzędzia" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "Ta funkcja jest przestarzała i zostanie usunięta w przyszłych wersjach." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "Twój backend bazy danych jest skonfigurowany do używania SQLite. SQLite powinien być używany tylko do programowania i testowania, a nie na produkcji." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Dni" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Godziny" -#: literals.py:36 +#: literals.py:37 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" @@ -237,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:292 #, 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:367 msgid "Object" msgstr "Obiekt" @@ -258,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" @@ -318,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 " @@ -336,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 " @@ -344,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 a9ddfde706..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 721446bbc5..5c6e1b2605 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Adicionar" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Remover" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -125,23 +125,27 @@ msgstr "" msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -149,7 +153,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licença" @@ -165,56 +169,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Ferramentas" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "" -#: literals.py:36 +#: literals.py:37 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 "" @@ -231,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Objeto" @@ -252,7 +233,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -312,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 " @@ -330,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 " @@ -338,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 54576439dc..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 350205e530..e7cb6dce83 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Adicionar" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Remover" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s não criado, erro: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s criado com sucesso." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s não removido, erro: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s removido com sucesso." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s não atualizado, erro: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s atualizado com sucesso." @@ -128,23 +128,27 @@ msgstr "%(object)s atualizado com sucesso." msgid "About this" msgstr "Sobre isso" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Perfil Idioma" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Editar perfil Idioma" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Documentação" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Erros" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Limpar tudo" @@ -152,7 +156,7 @@ msgstr "Limpar tudo" msgid "Forum" msgstr "Fórum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licença" @@ -168,56 +172,33 @@ msgstr "Código fonte" msgid "Support" msgstr "Suporte" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Ferramentas" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "Sua base de dados de back-end está configurada para utilizar SQLite. SQLite deve ser usado apenas em ambientes de desenvolvimento e testes, não de produção." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Dia" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Hora" -#: literals.py:36 +#: literals.py:37 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" @@ -234,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Objeto" @@ -255,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" @@ -315,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 " @@ -333,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 " @@ -341,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 b48ccfb9ea..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 af8f057fe8..78406bd767 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-09-03 08:34+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 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:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "Oferă verificarea stilului." -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "Mediul liniei de comandă cu autocompletare." -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "Adaugă tot setul" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Adăugți" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "Elimină tot setul" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Eliminați" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "Eroare de date duplicat: %(error)s" -#: generics.py:543 +#: generics.py:546 #, 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:559 #, python-format msgid "%(object)s created successfully." msgstr "Obiectul tip %(object)s a fost creat cu succes." -#: generics.py:595 +#: generics.py:598 #, 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:607 #, python-format msgid "%(object)s deleted successfully." msgstr "Obiectul tip %(object)s a fost șters cu succes." -#: generics.py:697 +#: generics.py:743 #, 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:754 #, python-format msgid "%(object)s updated successfully." msgstr "Obiectul tip %(object)s a fost actualizat cu succes." @@ -124,23 +124,27 @@ msgstr "Obiectul tip %(object)s a fost actualizat cu succes." msgid "About this" msgstr "Despre asta" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "Obțineți cartea" + +#: links.py:44 msgid "Locale profile" msgstr "Profilul localizării" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Editați profilul localizării" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Documentație" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Erori" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Curăță tot" @@ -148,7 +152,7 @@ msgstr "Curăță tot" msgid "Forum" msgstr "Forum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Licenţă" @@ -164,56 +168,33 @@ msgstr "Cod sursă" msgid "Support" msgstr "Suport tehnic" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Unelte" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "Această caracteristică a fost depreciată și va fi eliminată într-o versiune viitoare." -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "Backendul bazei de date este setat să utilizeze SQLite. SQLite ar trebui folosit numai pentru dezvoltare și testare, nu pentru producție." -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Zile" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Ore" -#: literals.py:36 +#: literals.py:37 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" @@ -230,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:292 #, 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:367 msgid "Object" msgstr "Obiect" @@ -251,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" @@ -311,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 " @@ -329,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 " @@ -337,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 63fc345c8e..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 553e84f8e7..2001fc283e 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -55,67 +55,67 @@ msgstr "Выбор" msgid "None" msgstr "Ничего" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Добавить" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Удалить" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s не создан, ошибка: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s успешно создан." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s не удалён, ошибка: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s успешно удалён." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s не обновлён, ошибка: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s успешно обновлён." @@ -124,23 +124,27 @@ msgstr "%(object)s успешно обновлён." msgid "About this" msgstr "Информация" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Профиль локали" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Редактировать локаль" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Документация" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "Ошибки" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "Очистить все" @@ -148,7 +152,7 @@ msgstr "Очистить все" msgid "Forum" msgstr "Форум" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Лицензия" @@ -164,56 +168,33 @@ msgstr "Исходные коды" msgid "Support" msgstr "Поддержка" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Инструменты" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "В качестве базы данных задан SQLite. SQLite не должен использоваться в рабочем окружении, только для разработки и тестирования!" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Дней" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Часов" -#: literals.py:36 +#: literals.py:37 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 "" @@ -230,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Объект" @@ -251,7 +232,7 @@ msgstr "Пространство имен" msgid "Date time" msgstr "Дата и время" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "Результат" @@ -311,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 " @@ -329,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 " @@ -337,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 049c4280e4..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 b79f648367..4dd1851e10 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -53,67 +53,67 @@ msgstr "" msgid "None" msgstr "Brez" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -122,23 +122,27 @@ msgstr "" msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -146,7 +150,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "" @@ -162,56 +166,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "" -#: literals.py:36 +#: literals.py:37 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 "" @@ -228,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "" @@ -249,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 "" @@ -309,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 " @@ -327,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 " @@ -335,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 6a07c5f6cd..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 c4093e0c14..aa1adabb15 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Ekle" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Çıkar" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s oluşturulamadı, hata: %(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s başarıyla oluşturuldu." -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s silinemedi, hata: %(error)s." -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s başarıyla silindi." -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s güncellenemedi, hata: %(error)s." -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s başarıyla güncellendi." @@ -124,23 +124,27 @@ msgstr "%(object)s başarıyla güncellendi." msgid "About this" msgstr "Bunun hakkında" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "Yerel profil ayarı" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "Yerel profili düzenle" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "Belgeleme" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -148,7 +152,7 @@ msgstr "" msgid "Forum" msgstr "Forum" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Lisans" @@ -164,56 +168,33 @@ msgstr "Kaynak kodu" msgid "Support" msgstr "Destek" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "Araçlar" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "Günler" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "Saatler" -#: literals.py:36 +#: literals.py:37 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" @@ -230,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Nesne" @@ -251,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ç" @@ -311,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 " @@ -329,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 " @@ -337,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 6f08d7b35f..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 05be088668..87d07c68ee 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 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:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "Thêm" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "Xóa" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "" @@ -123,23 +123,27 @@ msgstr "" msgid "About this" msgstr "" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "" @@ -147,7 +151,7 @@ msgstr "" msgid "Forum" msgstr "" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "Bản quyền" @@ -163,56 +167,33 @@ msgstr "" msgid "Support" msgstr "" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "" -#: literals.py:36 +#: literals.py:37 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 "" @@ -229,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "Đối tượng" @@ -250,7 +231,7 @@ msgstr "" msgid "Date time" msgstr "" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "" @@ -310,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 " @@ -328,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 " @@ -336,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 e7b3327e2d..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 2afcc5d666..c8071195d0 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-29 06:21+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-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:89 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:396 +#: dependencies.py:308 msgid "Used to allow offline translation of the code text strings." msgstr "" -#: dependencies.py:401 +#: dependencies.py:313 msgid "Provides style checking." msgstr "" -#: dependencies.py:406 +#: dependencies.py:318 msgid "Command line environment with autocompletion." msgstr "" -#: dependencies.py:411 +#: dependencies.py:323 msgid "Checks proper formatting of the README file." msgstr "" @@ -54,67 +54,67 @@ msgstr "选择" msgid "None" msgstr "没有" -#: generics.py:149 +#: generics.py:148 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:153 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:286 msgid "Add all" msgstr "" -#: generics.py:296 +#: generics.py:295 msgid "Add" msgstr "添加" -#: generics.py:306 +#: generics.py:305 msgid "Remove all" msgstr "" -#: generics.py:315 +#: generics.py:314 msgid "Remove" msgstr "移除" -#: generics.py:521 +#: generics.py:524 #, python-format msgid "Duplicate data error: %(error)s" msgstr "" -#: generics.py:543 +#: generics.py:546 #, python-format msgid "%(object)s not created, error: %(error)s" msgstr "%(object)s未创建,错误:%(error)s" -#: generics.py:556 +#: generics.py:559 #, python-format msgid "%(object)s created successfully." msgstr "%(object)s创建成功。" -#: generics.py:595 +#: generics.py:598 #, python-format msgid "%(object)s not deleted, error: %(error)s." msgstr "%(object)s未删除,错误:%(error)s。" -#: generics.py:604 +#: generics.py:607 #, python-format msgid "%(object)s deleted successfully." msgstr "%(object)s已成功删除。" -#: generics.py:697 +#: generics.py:743 #, python-format msgid "%(object)s not updated, error: %(error)s." msgstr "%(object)s未更新,错误:%(error)s。" -#: generics.py:708 +#: generics.py:754 #, python-format msgid "%(object)s updated successfully." msgstr "%(object)s已成功更新。" @@ -123,23 +123,27 @@ msgstr "%(object)s已成功更新。" msgid "About this" msgstr "关于这个" -#: links.py:40 +#: links.py:39 +msgid "Get the book" +msgstr "" + +#: links.py:44 msgid "Locale profile" msgstr "区域配置文件" -#: links.py:45 +#: links.py:49 msgid "Edit locale profile" msgstr "编辑区域配置文件" -#: links.py:50 +#: links.py:54 msgid "Documentation" msgstr "文档" -#: links.py:54 links.py:65 +#: links.py:59 msgid "Errors" msgstr "错误" -#: links.py:59 +#: links.py:65 msgid "Clear all" msgstr "清除所有" @@ -147,7 +151,7 @@ msgstr "清除所有" msgid "Forum" msgstr "论坛" -#: links.py:73 views.py:109 +#: links.py:73 views.py:105 msgid "License" msgstr "许可" @@ -163,56 +167,33 @@ msgstr "源代码" msgid "Support" msgstr "支持" -#: links.py:87 queues.py:15 views.py:210 +#: links.py:87 queues.py:15 views.py:214 msgid "Tools" msgstr "工具" -#: literals.py:13 +#: literals.py:14 msgid "" "This feature has been deprecated and will be removed in a future version." msgstr "" -#: literals.py:16 +#: literals.py:17 msgid "" "Your database backend is set to use SQLite. SQLite should only be used for " "development and testing, not for production." msgstr "您的数据库后端设置为使用SQLite。 SQLite只应用于开发和测试,而不能用于生产。" -#: literals.py:34 +#: literals.py:35 msgid "Days" msgstr "天" -#: literals.py:35 +#: literals.py:36 msgid "Hours" msgstr "时" -#: literals.py:36 +#: literals.py:37 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 "系统" @@ -229,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:292 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: mixins.py:296 +#: mixins.py:367 msgid "Object" msgstr "对象" @@ -250,7 +231,7 @@ msgstr "命名空间" msgid "Date time" msgstr "日期时间" -#: models.py:41 views.py:155 +#: models.py:41 views.py:151 msgid "Result" msgstr "结果" @@ -310,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 " @@ -328,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 " @@ -336,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/log.py b/mayan/apps/common/log.py new file mode 100644 index 0000000000..6aaaa44a1b --- /dev/null +++ b/mayan/apps/common/log.py @@ -0,0 +1,22 @@ +from __future__ import unicode_literals + +import logging + +from django.utils.termcolors import colorize + +PALETTE = { + 'CRITICAL': {'fg': 'red', 'opts': ('bold', 'blink', 'reverse')}, + 'DEBUG': {'fg': 'cyan'}, + 'ERROR': {'fg': 'red', 'opts': ('bold',)}, + 'INFO': {'fg': 'white'}, + 'SUCCESS': {'fg': 'green'}, + 'WARNING': {'fg': 'yellow', 'opts': ('bold', 'underscore')}, +} + + +class ColorFormatter(logging.Formatter): + def format(self, record): + record.msg = colorize( + text=record.msg, **PALETTE.get(record.levelname, {}) + ) + return super(ColorFormatter, self).format(record) 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..b2293d6338 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,15 +9,39 @@ 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 +from .compat import FileResponse from .exceptions import ActionError from .forms import DynamicForm 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 @@ -32,6 +57,29 @@ class DeleteExtraDataMixin(object): return HttpResponseRedirect(redirect_to=success_url) +class DownloadMixin(object): + as_attachment = True + + def get_as_attachment(self): + return self.as_attachment + + def get_download_file_object(self): + raise NotImplementedError( + 'Class must provide a .get_download_file_object() method that ' + 'return a file like object.' + ) + + def get_download_filename(self): + return None + + def render_to_response(self, **response_kwargs): + return FileResponse( + as_attachment=self.get_as_attachment(), + filename=self.get_download_filename(), + streaming_content=self.get_download_file_object() + ) + + class DynamicFormViewMixin(object): form_class = DynamicForm @@ -103,7 +151,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 +174,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 +320,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 +341,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 ) @@ -298,26 +369,6 @@ class ObjectNameMixin(object): return object_name -# TODO: Remove this mixin and replace with restricted queryset -class ObjectPermissionCheckMixin(object): - object_permission = None - - def get_permission_object(self): - return self.get_object() - - def dispatch(self, request, *args, **kwargs): - if self.object_permission: - AccessControlList.objects.check_access( - obj=self.get_permission_object(), - permissions=(self.object_permission,), - user=request.user - ) - - return super( - ObjectPermissionCheckMixin, self - ).dispatch(request, *args, **kwargs) - - class RedirectionMixin(object): action_cancel_redirect = None next_url = None @@ -383,6 +434,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 +464,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 +475,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..e0876d8b2e --- /dev/null +++ b/mayan/apps/common/setting_migrations.py @@ -0,0 +1,13 @@ +from __future__ import unicode_literals + +from mayan.apps.smart_settings.classes import NamespaceMigration +from mayan.apps.smart_settings.utils import smart_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 smart_yaml_load(value=value) 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 3c352df9df..052db26e93 100644 --- a/mayan/apps/common/tests/base.py +++ b/mayan/apps/common/tests/base.py @@ -2,16 +2,17 @@ from __future__ import absolute_import, unicode_literals from django.test import TestCase -from django_downloadview import assert_download_response - from mayan.apps.acls.tests.mixins import ACLTestCaseMixin -from mayan.apps.permissions.classes import Permission -from mayan.apps.smart_settings.classes import Namespace +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 ( ClientMethodsTestCaseMixin, ConnectionsCheckTestCaseMixin, - ContentTypeCheckTestCaseMixin, ModelTestCaseMixin, + ContentTypeCheckTestCaseMixin, DownloadTestCaseMixin, ModelTestCaseMixin, OpenFileCheckTestCaseMixin, RandomPrimaryKeyModelMonkeyPatchMixin, SilenceLoggerTestCaseMixin, TempfileCheckTestCasekMixin, TestViewTestCaseMixin @@ -19,20 +20,16 @@ from .mixins import ( class BaseTestCase( - SilenceLoggerTestCaseMixin, ConnectionsCheckTestCaseMixin, + LayerTestCaseMixin, SilenceLoggerTestCaseMixin, + ConnectionsCheckTestCaseMixin, DownloadTestCaseMixin, RandomPrimaryKeyModelMonkeyPatchMixin, ACLTestCaseMixin, - ModelTestCaseMixin, OpenFileCheckTestCaseMixin, - TempfileCheckTestCasekMixin, UserTestMixin, TestCase + ModelTestCaseMixin, OpenFileCheckTestCaseMixin, PermissionTestCaseMixin, + SmartSettingsTestCaseMixin, TempfileCheckTestCasekMixin, UserTestMixin, + TestCase ): """ This is the most basic test case class any test in the project should use. """ - assert_download_response = assert_download_response - - def setUp(self): - super(BaseTestCase, self).setUp() - Namespace.invalidate_cache_all() - Permission.invalidate_cache() class GenericViewTestCase( diff --git a/mayan/apps/common/tests/contrib/test_archvive_with_cp437_member.zip b/mayan/apps/common/tests/contrib/test_archvive_with_cp437_member.zip new file mode 100644 index 0000000000..7b65bc19a4 Binary files /dev/null and b/mayan/apps/common/tests/contrib/test_archvive_with_cp437_member.zip differ 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..32aec7aa71 100644 --- a/mayan/apps/common/tests/literals.py +++ b/mayan/apps/common/tests/literals.py @@ -12,6 +12,7 @@ TEST_VIEW_URL = 'test-view-url' # Filenames TEST_ARCHIVE_ZIP_SPECIAL_CHARACTERS_FILENAME_MEMBER = 'test_archvive_with_special_characters_filename_member.zip' +TEST_ARCHIVE_ZIP_CP437_MEMBER = 'test_archvive_with_cp437_member.zip' TEST_FILENAME1 = 'test_file1.txt' TEST_FILENAME2 = 'test_file2.txt' TEST_FILENAME3 = 'test_file3.txt' @@ -28,6 +29,10 @@ TEST_ARCHIVE_ZIP_SPECIAL_CHARACTERS_FILENAME_MEMBER_PATH = os.path.join( settings.BASE_DIR, 'apps', 'common', 'tests', 'contrib', TEST_ARCHIVE_ZIP_SPECIAL_CHARACTERS_FILENAME_MEMBER ) +TEST_ARCHIVE_ZIP_CP437_MEMBER_PATH = os.path.join( + settings.BASE_DIR, 'apps', 'common', 'tests', 'contrib', + TEST_ARCHIVE_ZIP_CP437_MEMBER +) TEST_FILE3_PATH = os.path.join( settings.BASE_DIR, 'apps', 'common', 'tests', 'contrib', TEST_FILENAME3 ) @@ -43,3 +48,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 afb9501fde..b2af43358f 100644 --- a/mayan/apps/common/tests/mixins.py +++ b/mayan/apps/common/tests/mixins.py @@ -18,12 +18,21 @@ from django.http import HttpResponse from django.template import Context, Template from django.test.utils import ContextList from django.urls import clear_url_caches, reverse -from django.utils.encoding import force_bytes +from django.utils.encoding import ( + DjangoUnicodeDecodeError, force_bytes, force_text +) from django.utils.six import PY3 +from stronghold.decorators import public + +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 ..compat import FileResponse + +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 +44,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 +52,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 +63,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( @@ -104,7 +123,7 @@ class ConnectionsCheckTestCaseMixin(object): class ContentTypeCheckTestCaseMixin(object): - expected_content_type = 'text/html; charset=utf-8' + expected_content_types = ('text/html', 'text/html; charset=utf-8') def _pre_setup(self): super(ContentTypeCheckTestCaseMixin, self)._pre_setup() @@ -115,11 +134,11 @@ class ContentTypeCheckTestCaseMixin(object): response = super(CustomClient, self).request(*args, **kwargs) content_type = response._headers.get('content-type', [None, ''])[1] - if test_instance.expected_content_type: - test_instance.assertEqual( - content_type, test_instance.expected_content_type, + if test_instance.expected_content_types: + test_instance.assertTrue( + content_type in test_instance.expected_content_types, msg='Unexpected response content type: {}, expected: {}.'.format( - content_type, test_instance.expected_content_type + content_type, ' or '.join(test_instance.expected_content_types) ) ) @@ -128,6 +147,53 @@ class ContentTypeCheckTestCaseMixin(object): self.client = CustomClient() +class DownloadTestCaseMixin(object): + def assert_download_response( + self, response, content=None, filename=None, is_attachment=None, + mime_type=None + ): + self.assertTrue(isinstance(response, FileResponse)) + + if filename: + self.assertEqual( + response[ + 'Content-Disposition' + ].split('filename="')[1].split('"')[0], filename + ) + + if content: + response_content = b''.join(list(response)) + + try: + response_content = force_text(response_content) + except DjangoUnicodeDecodeError: + """Leave as bytes""" + + self.assertEqual(response_content, content) + + if is_attachment is not None: + self.assertEqual(response['Content-Disposition'], 'attachment') + + if mime_type: + self.assertTrue(response['Content-Type'].startswith(mime_type)) + + +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 +377,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 +418,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 +449,66 @@ 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_is_public = False + test_view_object = None + test_view_name = TEST_VIEW_NAME + test_view_template = '{{ object }}' + 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,22 +518,34 @@ 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 }}') + template = Template(template_string=self.test_view_template) context = Context( - {'object': test_object, 'resolved_object': test_object} + dict_={'object': test_object, 'resolved_object': test_object} ) return HttpResponse(template.render(context=context)) - urlconf.urlpatterns.insert(0, url(TEST_VIEW_URL, test_view, name=TEST_VIEW_NAME)) + if self.test_view_is_public: + return public(function=test_view) + else: + 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 +554,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..f414b6c0b3 100644 --- a/mayan/apps/common/tests/test_compressed_files.py +++ b/mayan/apps/common/tests/test_compressed_files.py @@ -1,10 +1,11 @@ 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 from .literals import ( + TEST_ARCHIVE_ZIP_CP437_MEMBER_PATH, TEST_ARCHIVE_ZIP_SPECIAL_CHARACTERS_FILENAME_MEMBER_PATH, TEST_COMPRESSED_FILE_CONTENTS, TEST_FILE_CONTENTS_1, TEST_FILE3_PATH, TEST_FILENAME1, TEST_FILENAME3, TEST_TAR_BZ2_FILE_PATH, @@ -64,6 +65,11 @@ class ZipArchiveClassTestCase(TarArchiveClassTestCase): archive = Archive.open(file_object=file_object) list(archive.get_members()) + def test_open_cp437_member(self): + with open(TEST_ARCHIVE_ZIP_CP437_MEMBER_PATH, mode='rb') as file_object: + archive = Archive.open(file_object=file_object) + list(archive.get_members()) + class TarGzArchiveClassTestCase(TarArchiveClassTestCase): archive_path = TEST_TAR_GZ_FILE_PATH 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..b89f978e58 --- /dev/null +++ b/mayan/apps/common/tests/test_setting_migrations.py @@ -0,0 +1,33 @@ +from __future__ import unicode_literals + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.smart_settings.tests.mixins import SmartSettingTestMixin + +from ..settings import setting_shared_storage_arguments + + +class CommonSettingMigrationTestCase(SmartSettingTestMixin, BaseTestCase): + def test_common_shared_storage_arguments_0001_migration(self): + test_value = {'location': 'test value'} + self.test_setting = setting_shared_storage_arguments + self.test_config_value = '{}'.format( + Setting.serialize_value(value=test_value) + ) + self._create_test_config_file() + + self.assertEqual( + setting_shared_storage_arguments.value, + test_value + ) + + def test_common_shared_storage_arguments_0001_migration_with_dict(self): + test_value = {'location': 'test value'} + self.test_setting = setting_shared_storage_arguments + self.test_config_value = test_value + self._create_test_config_file() + + 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/common/widgets.py b/mayan/apps/common/widgets.py index 30ac5cb223..1af27ad451 100644 --- a/mayan/apps/common/widgets.py +++ b/mayan/apps/common/widgets.py @@ -79,7 +79,7 @@ class NamedMultiWidget(forms.widgets.Widget): def id_for_label(self, id_): if id_: - id_ += '_{}'.format(self.widgets.keys()[0]) + id_ += '_{}'.format(list(self.widgets.keys())[0]) return id_ def value_from_datadict(self, data, files, name): diff --git a/mayan/apps/converter/apps.py b/mayan/apps/converter/apps.py index af8a668c6f..b8921a96c3 100644 --- a/mayan/apps/converter/apps.py +++ b/mayan/apps/converter/apps.py @@ -3,14 +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 .dependencies import * # NOQA from .links import ( - link_transformation_create, link_transformation_delete, - link_transformation_edit + link_transformation_delete, link_transformation_edit, + link_transformation_select ) @@ -24,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..02b784c2a2 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 ) @@ -158,17 +145,7 @@ class Python(ConverterBase): if force_text(exception) == 'only algorithm code 1 and 2 are supported': # PDF uses an unsupported encryption # Try poppler-util's pdfinfo - process = pdfinfo('-', _in=file_object) - page_count = int( - filter( - lambda line: line.startswith('Pages:'), - force_text(process.stdout).split('\n') - )[0].replace('Pages:', '') - ) - file_object.seek(0) - logger.debug( - 'Document contains %d pages', page_count - ) + page_count = self.get_pdfinfo_page_count(file_object) return page_count else: error_message = _( @@ -176,6 +153,13 @@ class Python(ConverterBase): ) % exception logger.error(error_message) raise PageCountError(error_message) + elif force_text(exception) == 'EOF marker not found': + # PyPDF2 issue: https://github.com/mstamy2/PyPDF2/issues/177 + # Try poppler-util's pdfinfo + logger.debug('PyPDF2 GitHub issue #177 : EOF marker not found') + file_object.seek(0) + page_count = self.get_pdfinfo_page_count(file_object) + return page_count else: error_message = _( 'Exception determining PDF page count; %s' @@ -208,3 +192,17 @@ class Python(ConverterBase): pass return page_count + + def get_pdfinfo_page_count(self, file_object): + process = pdfinfo('-', _in=file_object) + page_count = int( + list(filter( + lambda line: line.startswith('Pages:'), + force_text(process.stdout).split('\n') + ))[0].replace('Pages:', '') + ) + file_object.seek(0) + logger.debug( + 'Document contains %d pages', page_count + ) + return page_count 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/dependencies.py b/mayan/apps/converter/dependencies.py index 7cc4960a3c..050f7d8570 100644 --- a/mayan/apps/converter/dependencies.py +++ b/mayan/apps/converter/dependencies.py @@ -24,7 +24,7 @@ BinaryDependency( ) PythonDependency( copyright_attribute='PIL.__doc__', module=__name__, name='Pillow', - version_string='==6.0.0', + version_string='==6.2.1', ) PythonDependency( module=__name__, name='PyPDF2', version_string='==1.26.0' 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/literals.py b/mayan/apps/converter/literals.py index 8e9933e454..5631a5ae6f 100644 --- a/mayan/apps/converter/literals.py +++ b/mayan/apps/converter/literals.py @@ -49,7 +49,7 @@ CONVERTER_OFFICE_FILE_MIMETYPES = ( 'text/rtf', ) -if platform.system() == 'OpenBSD': +if platform.system() in ('FreeBSD', 'OpenBSD'): DEFAULT_LIBREOFFICE_PATH = '/usr/local/bin/libreoffice' DEFAULT_PDFINFO_PATH = '/usr/local/bin/pdfinfo' DEFAULT_PDFTOPPM_PATH = '/usr/local/bin/pdftoppm' 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 78a5340c1a..43bd1e567c 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "تغيير حجم" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "تدوير" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 bf379e90e8..df158ecc51 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 93705d86ef..25eb08ea6b 100644 --- a/mayan/apps/converter/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/bg/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 # Pavlin Koldamov , 2012 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" +"PO-Revision-Date: 2019-12-09 09:15+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" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,189 +19,258 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" -msgstr "" +msgstr "Конвертор" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" -msgstr "" +msgstr "Трансформация" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" -msgstr "" +msgstr "Изключение, определящо броя на PDF страниците; %s" -#: backends/python.py:195 +#: backends/python.py:179 #, python-format msgid "Exception determining page count using Pillow; %s" -msgstr "" +msgstr "Изключение, определящо броя на страниците с използване на Възглавница; %s" -#: classes.py:118 +#: classes.py:116 msgid "LibreOffice not installed or not found." -msgstr "" +msgstr "LibreOffice не е инсталиран или не е намерен." -#: classes.py:201 +#: classes.py:199 msgid "Not an office file format." -msgstr "" +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 "" +msgstr "Помощна програма от пакета poppler-utils, използвана за проверка на PDF файлове." #: dependencies.py:21 msgid "" "Utility from the popper-utils package used to extract pages from PDF files " "into PPM format images." -msgstr "" +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 "" +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 "" +msgstr "Изтрийте" -#: links.py:48 +#: links.py:25 msgid "Edit" msgstr "Редактиране" -#: links.py:53 models.py:58 +#: links.py:29 msgid "Transformations" -msgstr "" +msgstr "Трансформации" -#: models.py:37 -msgid "" -"Order in which the transformations will be executed. If left unchanged, an " -"automatic order value will be assigned." -msgstr "" +#: links.py:35 +msgid "Select new transformation" +msgstr "Изберете нова трансформация" -#: models.py:39 -msgid "Order" -msgstr "" - -#: models.py:43 +#: models.py:23 models.py:85 msgid "Name" msgstr "Име" -#: models.py:47 +#: 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:89 msgid "" "Enter the arguments for the transformation as a YAML dictionary. ie: " "{\"degrees\": 180}" -msgstr "" +msgstr "Въведете аргументите за преобразуването като YAML речник. т.е.: {"градуси": 180}" -#: models.py:49 +#: models.py:91 msgid "Arguments" -msgstr "" +msgstr "Аргументи" + +#: models.py:100 +msgid "Layer transformation" +msgstr "Трансформация на слоеве" + +#: models.py:101 +msgid "Layer transformations" +msgstr "Трансформации на слоеве" #: permissions.py:10 msgid "Create new transformations" -msgstr "" +msgstr "Създайте нови трансформации" #: permissions.py:13 msgid "Delete transformations" -msgstr "" +msgstr "Изтрийте трансформациите" #: permissions.py:16 msgid "Edit transformations" -msgstr "" +msgstr "Редактиране на трансформации" #: permissions.py:19 msgid "View existing transformations" -msgstr "" +msgstr "Преглед на съществуващите трансформации" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." -msgstr "" +msgstr "Използван бекенд за преобразуване на графики." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." -msgstr "" +msgstr "Опции за конфигуриране на бекенда за графично преобразуване" -#: transformations.py:81 +#: transformations.py:99 msgid "Crop" -msgstr "" - -#: transformations.py:156 -msgid "Flip" -msgstr "" - -#: transformations.py:167 -msgid "Gaussian blur" -msgstr "" +msgstr "Изрязване" #: transformations.py:177 +msgid "Draw rectangle" +msgstr "Начертайте правоъгълник" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "Начертайте правоъгълник (процентни координати)" + +#: transformations.py:376 +msgid "Flip" +msgstr "Преобръщане" + +#: transformations.py:387 +msgid "Gaussian blur" +msgstr "Гаусово замъгляване" + +#: transformations.py:397 msgid "Line art" -msgstr "" +msgstr "Графично изкуство" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" -msgstr "" +msgstr "Огледало" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Преоразмеряване" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" -msgstr "Завъртете" +msgstr "Завъртане" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" -msgstr "" +msgstr "Завъртане на 90 градуса" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" -msgstr "" +msgstr "Въртене на 180 градуса" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" -msgstr "" +msgstr "Въртене на 270 градуса" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" -msgstr "" +msgstr "Размазващо маскиране" -#: transformations.py:300 +#: transformations.py:520 msgid "Zoom" msgstr "Увеличаване" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." -msgstr "" +msgstr "Въведете валидна YAML стойност." -#: views.py:72 +#: views.py:62 #, python-format -msgid "Create new transformation for: %s" -msgstr "" +msgid "Error creating transforamtion: %s." +msgstr "Грешка при създаването на трансформации: %s." -#: 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 "" +msgstr "Да се изтрие трансформацията „%(transformation)s“ за: %(content_object)s?" -#: views.py:171 +#: views.py:188 #, python-format msgid "Edit transformation \"%(transformation)s\" for: %(content_object)s" -msgstr "" +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 "" +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 ae60ed250f..b3ce50de6d 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konverter" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformacija" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Crop" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Flip" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Gaussian blur" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Line art" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Ogledalo" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Promjeni veličinu" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Rotiraj" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Rotirati 90 stepeni" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Rotirati 180 stepeni" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Rotirati 270 stepeni" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Neoštećeno maskiranje" -#: transformations.py:300 +#: transformations.py:520 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 aedce082ce..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 a943f837b2..ff398ce9ef 100644 --- a/mayan/apps/converter/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/converter/locale/cs/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -17,189 +18,258 @@ 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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" -msgstr "" +msgstr "Konvertor" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" -msgstr "" +msgstr "Transformace" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" -msgstr "" +msgstr "Výjimka určující počet stránek PDF; %s" -#: backends/python.py:195 +#: backends/python.py:179 #, python-format msgid "Exception determining page count using Pillow; %s" -msgstr "" +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 "" +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 "" +msgstr "Obslužný program z balíčku poppler-utils používaný k prohlížení souborů PDF." #: dependencies.py:21 msgid "" "Utility from the popper-utils package used to extract pages from PDF files " "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:24 +msgid "Available transformations for this layer." msgstr "" -#: forms.py:28 +#: forms.py:61 #, python-format msgid "\"%s\" not a valid entry." +msgstr ""%s" není platná položka." + +#: layers.py:12 +msgid "Saved transformations" msgstr "" -#: links.py:36 -msgid "Create new transformation" -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" + +#: links.py:35 +msgid "Select new transformation" msgstr "" -#: models.py:37 +#: 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 "" +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 "" - -#: 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 "Zadejte argumenty pro transformaci jako slovník YAML. tj .: {"stupně": 180}" + +#: models.py:91 +msgid "Arguments" +msgstr "Argumenty" + +#: models.py:100 +msgid "Layer transformation" msgstr "" -#: models.py:49 -msgid "Arguments" +#: models.py:101 +msgid "Layer transformations" msgstr "" #: permissions.py:10 msgid "Create new transformations" -msgstr "" +msgstr "Vytvořit nové transformace" #: permissions.py:13 msgid "Delete transformations" -msgstr "" +msgstr "Odstranit transformace" #: permissions.py:16 msgid "Edit transformations" -msgstr "" +msgstr "Upravit transformace" #: permissions.py:19 msgid "View existing transformations" -msgstr "" +msgstr "Zobrazit existující transformace" -#: settings.py:16 +#: settings.py:20 msgid "Graphics conversion backend to use." -msgstr "" +msgstr "Grafické převody backend-u k použití." -#: settings.py:35 +#: settings.py:32 msgid "Configuration options for the graphics conversion backend." -msgstr "" +msgstr "Možnosti konfigurace pro backend grafické konverze." -#: transformations.py:81 +#: transformations.py:99 msgid "Crop" -msgstr "" - -#: transformations.py:156 -msgid "Flip" -msgstr "" - -#: transformations.py:167 -msgid "Gaussian blur" -msgstr "" +msgstr "Oříznutí" #: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 +msgid "Flip" +msgstr "Překlopit" + +#: transformations.py:387 +msgid "Gaussian blur" +msgstr "Gaussovské rozostření" + +#: transformations.py:397 msgid "Line art" -msgstr "" +msgstr "Kresba tužkou" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" -msgstr "" +msgstr "Zrcadlo" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" -msgstr "" +msgstr "Změnit velikost" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" -msgstr "" +msgstr "Otočit" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" -msgstr "" +msgstr "Otočit o 90 stupňů" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" -msgstr "" +msgstr "Otočit o 180 stupňů" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" -msgstr "" +msgstr "Otočit o 270 stupňů" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" -msgstr "" +msgstr "Neostré maskování " -#: transformations.py:300 +#: transformations.py:520 msgid "Zoom" -msgstr "" +msgstr "Zoom" -#: validators.py:26 +#: validators.py:23 msgid "Enter a valid YAML value." -msgstr "" +msgstr "Zadejte platnou hodnotu YAML." -#: 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 "" +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 "" +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 "" - -#: 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/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 fda349cf30..d7c6fa41d1 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 35f74a4e57..22b335497d 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-08 22:15+0000\n" -"Last-Translator: Mathias Behrle \n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konverter" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformation" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Zuschneiden" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Drehen" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Gaußsche Unschärfe" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Liniengrafik" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Spiegeln" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Größe ändern" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Drehen" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Um 90° drehen" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Um 180° drehen" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Um 270° drehen" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Unscharf maskieren" -#: transformations.py:300 +#: transformations.py:520 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 4606fa5838..9fc214dab5 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Μετατροπέας" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Μετασχηματισμός" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Αναστροφή" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Περιστροφή κατά 90 μοιρες" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Περιστροφή κατά 180 μοίρες" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Περιστροφή κατά 270 μοίρες" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 087307a65c..966660957b 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-09-24 23:07-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 277c3b01cd..c5ef0f9b6c 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-28 19:34+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Convertidor" -#: apps.py:31 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:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Recortar" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "Dibujar rectángulo" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "Dibujar rectángulo (coordenadas de porcentajes)" + +#: transformations.py:376 msgid "Flip" msgstr "Voltear" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Desenfoque gaussiano" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Arte lineal" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Espejo" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Cambiar el tamaño" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Girar" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Girar 90 grados" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Girar 180 grados" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Girar 270 grados" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Reenfocar " -#: transformations.py:300 +#: transformations.py:520 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 1fbb4a3ae7..7453c7b794 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "مبدل" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "دگرگونی" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "تعداد صفحات PDF را تعیین کنید؛ %s" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "محصول" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "تلنگر" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "تار گاوسی" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "هنر خط" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "آینه" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "تغییر اندازه" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "چرخش" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "چرخش 90 درجه" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "چرخش 180 درجه" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "چرخش 270 درجه" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "ماسک غیرشفاف" -#: transformations.py:300 +#: transformations.py:520 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 39d306ff19..c4b291f9f9 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-09 13:35+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Convertisseur" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformation" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Découper" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Retourner" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Flou gaussien" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Line art" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Mirroir" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Redimensionner" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Rotation" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Rotation à 90 degrées" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Rotation à 180 degrées" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Rotation à 270 degrées" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Masquage flou" -#: transformations.py:300 +#: transformations.py:520 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 90cba5d8db..92b0a2d80e 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konverter" -#: apps.py:31 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:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Átméretez" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 f4647574ca..2a576ce6a2 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-12 18:08+0000\n" -"Last-Translator: Adek Lanin\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Pengkonversi" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 15b80921e2..0a6f7e64b5 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Convertitore" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Trasformazione" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Taglia" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Capovolgi" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Sfocatura gaussiana" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Line art" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Specchio" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Ridimensiona" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Ruotare" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Ruota di 90 Gradi" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Ruota di 180 gradi" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Ruota di 270 gradi" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Maschera di contrasto" -#: transformations.py:300 +#: transformations.py:520 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 8cc6a8bca1..013cac69cc 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-06-27 13:00+0000\n" -"Last-Translator: Māris Teivāns \n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Pārveidotājs" -#: apps.py:31 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:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Apgriezt" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Flip" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Gausa izplūšana" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Line art" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Spogulis" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Mainīt izmērus" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Pagriezt" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Pagrieziet 90 grādus" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Pagrieziet 180 grādus" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Pagrieziet 270 grādus" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Nenovērtējama maskēšana" -#: transformations.py:300 +#: transformations.py:520 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 59834c777c..54e101aa18 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Converter" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformatie" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Bijsnijden" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Afmeting wijzigen" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Roteren" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 15a3388b69..eece277423 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Konwerter" -#: apps.py:31 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:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Przycięcie" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Odbicie" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Rozmycie Gaussa" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Rysunek kreskowy" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Odbicie lustrzane" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Zmiana rozmiaru" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Obrócenie" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Obrócenie o 90 stopni" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Obrócenie o 180 stopni" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Obrócenie o 270 stopni" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Maska wyostrzająca" -#: transformations.py:300 +#: transformations.py:520 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 b6b4e64dd7..7caba92782 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Redimensionar" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Rodar" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 704fc16d85..dceacadbdf 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Conversor" -#: apps.py:31 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:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Recortar" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Giro" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Gaussian blur" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Desenho de linhas" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Espelho" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Redimensionar" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Rotacionar" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Girar 90 graus" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Girar 180 graus" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Girar 270 graus" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Unsharp mascaramento" -#: transformations.py:300 +#: transformations.py:520 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 83beaf729e..65025d0e3d 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-08 08:08+0000\n" -"Last-Translator: Harald Ersch\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Convertizor" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformare" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Decupare" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "Desenați dreptunghiul" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "Desenați un dreptunghi (coordonate procente)" + +#: transformations.py:376 msgid "Flip" msgstr "Basculare" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Încețoșare Gaussiană" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Linie de arta" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Oglindire" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Redimensionare" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Rotire" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "Rotiți 90 de grade" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "Rotiți 180 de grade" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "Rotiți 270 de grade" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Unsharp masking" -#: transformations.py:300 +#: transformations.py:520 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 90f250b092..e949e800ec 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "Конвертер" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Преобразование" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "Ошибка при определении числа страниц PDF; %s" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "Кадрировать" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Изменение размера" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Вращать" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 e8eaeab228..e899fdd99d 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 d766b3828a..b8a7634e1d 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 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:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "Transformasyon" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, 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:179 #, 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:99 msgid "Crop" msgstr "Ekin" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "Fiske" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "Gauss bulanıklığı" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "Çizgi resim" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "Ayna" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "Yeniden boyutlandırma" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "Döndürme" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "90 derece döndür" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "180 derece döndür" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "270 derece döndür" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "Keskin olmayan maskeleme" -#: transformations.py:300 +#: transformations.py:520 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 0783b94377..bd67eab3c5 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "" -#: transformations.py:300 +#: transformations.py:520 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 0dd6e88163..6676da5ef5 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-09-24 23:07-0400\n" -"PO-Revision-Date: 2019-05-03 05:20+0000\n" +"POT-Creation-Date: 2019-12-18 00:26-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:22 permissions.py:7 settings.py:12 +#: apps.py:22 permissions.py:7 settings.py:14 msgid "Converter" msgstr "转换器" -#: apps.py:31 models.py:57 +#: apps.py:36 forms.py:25 msgid "Transformation" msgstr "转换" -#: backends/python.py:175 backends/python.py:181 +#: backends/python.py:152 backends/python.py:165 #, python-format msgid "Exception determining PDF page count; %s" msgstr "确定PDF页数时异常; %s" -#: backends/python.py:195 +#: backends/python.py:179 #, 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:99 msgid "Crop" msgstr "裁剪" -#: transformations.py:156 +#: transformations.py:177 +msgid "Draw rectangle" +msgstr "" + +#: transformations.py:279 +msgid "Draw rectangle (percents coordinates)" +msgstr "" + +#: transformations.py:376 msgid "Flip" msgstr "翻动" -#: transformations.py:167 +#: transformations.py:387 msgid "Gaussian blur" msgstr "高斯模糊" -#: transformations.py:177 +#: transformations.py:397 msgid "Line art" msgstr "线条艺术" -#: transformations.py:188 +#: transformations.py:408 msgid "Mirror" msgstr "镜像" -#: transformations.py:199 +#: transformations.py:419 msgid "Resize" msgstr "调整大小" -#: transformations.py:226 +#: transformations.py:446 msgid "Rotate" msgstr "旋转" -#: transformations.py:252 +#: transformations.py:472 msgid "Rotate 90 degrees" msgstr "旋转90度" -#: transformations.py:263 +#: transformations.py:483 msgid "Rotate 180 degrees" msgstr "旋转180度" -#: transformations.py:274 +#: transformations.py:494 msgid "Rotate 270 degrees" msgstr "旋转270度" -#: transformations.py:284 +#: transformations.py:504 msgid "Unsharp masking" msgstr "钝化掩模" -#: transformations.py:300 +#: transformations.py:520 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..a5c3387515 --- /dev/null +++ b/mayan/apps/converter/setting_migrations.py @@ -0,0 +1,13 @@ +from __future__ import unicode_literals + +from mayan.apps.smart_settings.classes import NamespaceMigration +from mayan.apps.smart_settings.utils import smart_yaml_load + + +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 smart_yaml_load(value=value) 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..9de1f306b9 --- /dev/null +++ b/mayan/apps/converter/tests/test_setting_migrations.py @@ -0,0 +1,35 @@ +from __future__ import unicode_literals + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.smart_settings.tests.mixins import SmartSettingTestMixin + +from ..settings import setting_graphics_backend_arguments + + +class ConverterSettingMigrationTestCase( + SmartSettingTestMixin, BaseTestCase +): + def test_converter_graphics_backend_arguments_0001_migration(self): + test_value = {'location': 'test value'} + self.test_setting = setting_graphics_backend_arguments + self.test_config_value = '{}'.format( + Setting.serialize_value(value=test_value) + ) + self._create_test_config_file() + + self.assertEqual( + setting_graphics_backend_arguments.value, + test_value + ) + + def test_converter_graphics_backend_arguments_0001_migration_with_dict(self): + test_value = {'location': 'test value'} + self.test_setting = setting_graphics_backend_arguments + self.test_config_value = test_value + self._create_test_config_file() + + 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..0d6520d31f 100644 --- a/mayan/apps/converter/transformations.py +++ b/mayan/apps/converter/transformations.py @@ -3,21 +3,30 @@ 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.six import with_metaclass 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(with_metaclass(meta=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 = {} @staticmethod @@ -44,16 +53,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 +169,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 +535,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 84e50ea01b..9b18901972 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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.mo b/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.mo index 819faa995e..282081ffff 100644 Binary files a/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.po index 9b0c9fdc1d..c69bb556ed 100644 --- a/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/bg/LC_MESSAGES/django.po @@ -5,15 +5,16 @@ # # Translators: # Pavlin Koldamov , 2019 +# Lyudmil Antonov , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" -"Last-Translator: Pavlin Koldamov , 2019\n" +"Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,12 +24,12 @@ msgstr "" #: apps.py:14 msgid "Dashboards" -msgstr "" +msgstr "Контролни табла" #: dashboards.py:7 msgid "Main" msgstr "Главно" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" -msgstr "" +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 381fe80716..6d58b7b13c 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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.mo b/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.mo index 6eea0d41ef..94e4ba2813 100644 Binary files a/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.po b/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.po index 9159438861..a34b3d2c82 100644 --- a/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/cs/LC_MESSAGES/django.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Michal Švábík , 2019 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,12 +23,12 @@ msgstr "" #: apps.py:14 msgid "Dashboards" -msgstr "" +msgstr "Řídicí panely" #: dashboards.py:7 msgid "Main" -msgstr "" +msgstr "Hlavní" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" -msgstr "" +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 d56547c65a..99cab9d0b4 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 c12494b933..73359158a4 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 78c6b4e237..4d9b291233 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 999b276640..0067e4dbb7 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 cbe747646e..6585388f7c 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 c731b4b173..dfdfd5ed47 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 e5154df493..0bee6791f1 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 370c763452..0a85144d62 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 e6ce88d54e..38dd5daace 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 f19001f1d4..3ca97b344e 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 af6ebc5e1c..a9a1cb662b 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 1a904bd35b..0d00f0bdf1 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 14b42ef028..bf14b56380 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 68a335e27d..2e76f3d6da 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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.mo b/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.mo index c0e7f3a205..722db47b8b 100644 Binary files a/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.mo differ 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 d86ff0094d..0c16996a7c 100644 --- a/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/pt_BR/LC_MESSAGES/django.po @@ -6,15 +6,16 @@ # Translators: # Jadson Ribeiro , 2019 # José Samuel Facundo da Silva , 2019 +# Rodrigo de Almeida Sottomaior Macedo , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" -"Last-Translator: José Samuel Facundo da Silva , 2019\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo , 2019\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,12 +25,12 @@ msgstr "" #: apps.py:14 msgid "Dashboards" -msgstr "" +msgstr "Painéis" #: dashboards.py:7 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 ad35227776..2fcd2cca86 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 db4c93f745..54376ad641 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 3bd6686c14..4408124b21 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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.mo b/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.mo index 6b952270ac..ee55584b46 100644 Binary files a/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.mo differ 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 14576944d7..b9749d6d1c 100644 --- a/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/dashboards/locale/tr_TR/LC_MESSAGES/django.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# emreunal , 2019 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-14 03:23+0000\n" +"Last-Translator: emreunal , 2019\n" "Language-Team: Turkish (Turkey) (https://www.transifex.com/rosarior/teams/13584/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,12 +23,12 @@ msgstr "" #: apps.py:14 msgid "Dashboards" -msgstr "" +msgstr "Paneller" #: dashboards.py:7 msgid "Main" -msgstr "" +msgstr "Ana" -#: templates/dashboards/numeric_widget.html:27 +#: templates/dashboards/numeric_widget.html:29 msgid "View details" -msgstr "" +msgstr "Detayları görüntüle" 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 e1f09f8048..cb71153aeb 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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 098fbfe5ec..1202335f86 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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/apps.py b/mayan/apps/dependencies/apps.py index 8fb528921f..35000e2c3f 100644 --- a/mayan/apps/dependencies/apps.py +++ b/mayan/apps/dependencies/apps.py @@ -10,7 +10,6 @@ from mayan.apps.common.html_widgets import TwoStateWidget from mayan.apps.navigation.classes import SourceColumn from .classes import Dependency, DependencyGroup, DependencyGroupEntry -from .dependencies import * # NOQA from .links import ( link_check_version, link_dependency_group_entry_detail, link_dependency_group_entry_list, link_dependency_group_list, @@ -29,6 +28,8 @@ class DependenciesApp(MayanAppConfig): def ready(self): super(DependenciesApp, self).ready() + Dependency.initialize() + SourceColumn( attribute='get_label', label=_('Label'), order=-1, source=Dependency ) diff --git a/mayan/apps/dependencies/classes.py b/mayan/apps/dependencies/classes.py index fc498dd254..e91859ca64 100644 --- a/mayan/apps/dependencies/classes.py +++ b/mayan/apps/dependencies/classes.py @@ -1,7 +1,8 @@ from __future__ import print_function, unicode_literals -import fileinput import json +from importlib import import_module +import logging import pkg_resources import shutil import sys @@ -23,11 +24,13 @@ from django.utils.translation import ugettext_lazy as _, ugettext from mayan.apps.common.compat import FileNotFoundErrorException from mayan.apps.common.utils import resolve_attribute -from mayan.apps.storage.utils import mkdtemp +from mayan.apps.storage.utils import mkdtemp, patch_files as storage_patch_files from .algorithms import HashAlgorithm from .exceptions import DependenciesException +logger = logging.getLogger(__name__) + class Provider(object): """Base provider class""" @@ -73,6 +76,12 @@ environment_development = DependencyEnvironment( 'can ignore missing dependencies under this environment.' ), label=_('Development'), name='development' ) +environment_documentation = DependencyEnvironment( + help_text=_( + 'Environment used for building the documentation. End users ' + 'can ignore missing dependencies under this environment.' + ), label=_('Documentation'), name='documentation' +) environment_production = DependencyEnvironment( help_text=_( 'Normal environment for end users. A missing dependency under this ' @@ -158,6 +167,18 @@ class DependencyGroupEntry(object): class Dependency(object): _registry = {} + @staticmethod + def initialize(): + for app in apps.get_app_configs(): + try: + import_module('{}.dependencies'.format(app.name)) + except ImportError as exception: + if force_text(exception) not in ('No module named dependencies', 'No module named \'{}.dependencies\''.format(app.name)): + logger.error( + 'Error importing %s dependencies.py file; %s', app.name, + exception + ) + @staticmethod def return_sorted(dependencies): return sorted(dependencies, key=lambda x: x.get_label()) @@ -388,22 +409,12 @@ class Dependency(object): return self.version_string or _('Not specified') def patch_files(self, path=None, replace_list=None): - """ - Search and replace content from a list of file based on a pattern - replace_list[ - { - 'filename_pattern': '*.css', - 'content_patterns': [ - { - 'search': '', - 'replace': '', - } - ] - } - ] - """ print(_('Patching files... '), end='') - sys.stdout.flush() + + try: + sys.stdout.flush() + except AttributeError: + pass if not path: path = self.get_install_path() @@ -411,18 +422,7 @@ class Dependency(object): if not replace_list: replace_list = self.replace_list - path_object = Path(path) - for replace_entry in replace_list or []: - for path_entry in path_object.glob('**/{}'.format(replace_entry['filename_pattern'])): - if path_entry.is_file(): - # PY3 - # Don't use context processor to allow working on Python 2.7 - # Update on Mayan EDMS version >= 4.0 - file_object = fileinput.FileInput(force_text(path_entry), inplace=True) - for line in file_object: - for pattern in replace_entry['content_patterns']: - print(line.replace(pattern['search'], pattern['replace']), end='') - file_object.close() + storage_patch_files(path=path, replace_list=replace_list) def verify(self): """ diff --git a/mayan/apps/dependencies/literals.py b/mayan/apps/dependencies/literals.py index 0a8a45f603..1b4a6d0e4d 100644 --- a/mayan/apps/dependencies/literals.py +++ b/mayan/apps/dependencies/literals.py @@ -1,4 +1,4 @@ from __future__ import print_function, unicode_literals MAYAN_PYPI_NAME = 'mayan-edms' -PYPI_URL = 'https://pypi.python.org/pypi' +PYPI_URL = 'https://pypi.org' diff --git a/mayan/apps/dependencies/locale/ar/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/ar/LC_MESSAGES/django.po index edea9696a9..6b9a36d881 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,134 +23,144 @@ 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:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "العنوان" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Description" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "النوع" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "الاصدار" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "اسم" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "لا شيء" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -235,7 +245,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -266,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 "" @@ -287,34 +297,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "" diff --git a/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.mo index 785e678afe..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 d3c8cfeb32..2064f0769b 100644 --- a/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/bg/LC_MESSAGES/django.po @@ -7,15 +7,16 @@ # Iliya Georgiev , 2019 # Pavlin Koldamov , 2019 # Roberto Rosario, 2019 +# Lyudmil Antonov , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Roberto Rosario, 2019\n" +"Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,204 +24,229 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" -msgstr "" +msgstr "Зависимости" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" -msgstr "" +msgstr "Етикет" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" -msgstr "" +msgstr "Вътрешно име" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Описание" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" -msgstr "" +msgstr "Тип" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" -msgstr "" +msgstr "Други данни" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" -msgstr "" +msgstr "Декларирано от" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Версия" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" -msgstr "" +msgstr "Среда" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" -msgstr "" +msgstr "Проверка" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" +"Среда, използвана за изграждане на дистрибуторски пакети на софтуера. " +"Крайните потребители могат да игнорират липсващите зависимости в тази среда." -#: classes.py:68 +#: classes.py:71 msgid "Build" -msgstr "" +msgstr "Конструкция" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" +"Среда, използвана от разработчиците за извършване на промени в кода. " +"Крайните потребители могат да игнорират липсващите зависимости в тази среда." -#: classes.py:74 +#: classes.py:77 msgid "Development" -msgstr "" +msgstr "Разработка" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" +"Среда, използвана за изграждане на документацията. Крайните потребители " +"могат да игнорират липсващите зависимости в тази среда." + +#: classes.py:83 +msgid "Documentation" +msgstr "Документация" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" +"Нормална среда за крайните потребители. Липсваща зависимост в тази среда ще " +"доведе до проблеми и грешки при нормална употреба." -#: classes.py:80 +#: classes.py:89 msgid "Production" -msgstr "" +msgstr "Производство" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" +"Използвана среда за набора тестове за проверка на функционалността на кода. " +"Зависимостите в тази среда не са необходими за нормалното използване в " +"производството." -#: classes.py:87 +#: classes.py:96 msgid "Testing" -msgstr "" +msgstr "Тестване" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Име" -#: classes.py:173 +#: classes.py:194 msgid "App" -msgstr "" +msgstr "Приложение" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." -msgstr "" +msgstr "Трябва да посочите поне едно: app_label или модул." -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." -msgstr "" +msgstr "Зависимостта „%s“ вече е регистрирана." -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " -msgstr "" +msgstr "Инсталиране на пакет: %s ..." -#: classes.py:310 +#: classes.py:331 msgid "Already installed." -msgstr "" +msgstr "Вече е инсталирано." -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." -msgstr "" +msgstr "Завършено." -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" -msgstr "" +msgstr "Инсталирана е правилна версия" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" -msgstr "" +msgstr "Липсваща или неправилна версия" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Няма" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" -msgstr "" +msgstr "Не е конкретизирано" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " -msgstr "" +msgstr "Пачване на файлове ..." #: classes.py:440 msgid "Executables that are called directly by the code." -msgstr "" +msgstr "Изпълними файлове, които се извикват директно от кода." #: classes.py:442 msgid "Binary" -msgstr "" +msgstr "Двоичен файл" #: classes.py:459 msgid "" "JavaScript libraries downloaded the from NPM registry and used for front-end" " functionality." msgstr "" +"JavaScript библиотеките са изтеглени от регистъра на NPM и са използвани за " +"функционалност на интерфейса." #: classes.py:462 msgid "JavaScript" -msgstr "" +msgstr "JavaScript" #: classes.py:496 classes.py:729 msgid "Downloading... " -msgstr "" +msgstr "Изтегля се ..." #: classes.py:499 msgid "Verifying... " -msgstr "" +msgstr "Проверява се ..." #: classes.py:502 classes.py:732 msgid "Extracting... " -msgstr "" +msgstr "Извличане ..." #: classes.py:681 msgid "Python packages downloaded from PyPI." -msgstr "" +msgstr "Пакети Python, изтеглени от PyPI." #: classes.py:683 msgid "Python" -msgstr "" +msgstr "Python" #: classes.py:710 msgid "Fonts downloaded from fonts.googleapis.com." -msgstr "" +msgstr "Шрифтове, изтеглени от fonts.googleapis.com." #: classes.py:712 msgid "Google font" -msgstr "" +msgstr "Google шрифт" #: classes.py:791 msgid "Declared in app" -msgstr "" +msgstr "Декларирано в приложение" #: classes.py:792 msgid "Show dependencies by the app that declared them." -msgstr "" +msgstr "Показване зависимостите от приложението, което ги е декларирало." #: classes.py:796 msgid "Class" -msgstr "" +msgstr "Клас" #: classes.py:797 msgid "" "Show the different classes of dependencies. Classes are usually divided by " "language or the file types of the dependency." msgstr "" +"Покажете различните класове на зависимости. Класовете обикновено се разделят" +" по език или файлови типове на зависимостта." #: classes.py:802 msgid "State" -msgstr "" +msgstr "Състояние" #: classes.py:803 msgid "" @@ -228,16 +254,21 @@ msgid "" "dependencies is installed and is of a correct version. False means the " "dependencies is missing or an incorrect version is present." msgstr "" +"Показване различните състояния на зависимостите. Вярно означава, че " +"зависимостите са инсталирани и са с правилна версия. Грешно означава, че " +"зависимостите липсват или е налице неправилна версия." #: classes.py:810 msgid "" "Dependencies required for an environment might not be required for another. " "Example environments: Production, Development." msgstr "" +"Зависимости, необходими за дадена среда, може да не се изискват за друга. " +"Примерни среди: производство, разработка." -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" -msgstr "" +msgstr "Проверка за актуализации" #: links.py:17 msgid "Groups" @@ -245,7 +276,7 @@ msgstr "Групи" #: links.py:25 msgid "Entries" -msgstr "" +msgstr "Записи" #: links.py:33 msgid "Details" @@ -253,68 +284,81 @@ msgstr "Детайли" #: links.py:38 msgid "Dependencies licenses" -msgstr "" +msgstr "Лицензи за зависимости" #: management/commands/generaterequirements.py:16 msgid "" "Comma separated names of dependencies to exclude from the list generated." msgstr "" +"Разделени със запетаи имена на зависимости, които да се изключат от " +"генерирания списък." #: management/commands/generaterequirements.py:22 msgid "" "Comma separated names of dependencies to show in the list while excluding " "every other one." msgstr "" +"Разделени със запетаи имена на зависимости, които да се показват в списъка, " +"като изключват всяка друга." -#: management/commands/installjavascript.py:15 +#: management/commands/installdependencies.py:15 msgid "Process a specific app." -msgstr "" +msgstr "Обработка на конкретно приложение." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." -msgstr "" +msgstr "Принудително инсталиране, дори ако вече е инсталирано." #: permissions.py:10 msgid "View dependencies" -msgstr "" +msgstr "Вижте зависимостите" #: views.py:23 #, python-format msgid "The version you are using is outdated. The latest version is %s" -msgstr "" +msgstr "Версията, която използвате, е остаряла. Последната версия е %s" #: views.py:28 msgid "It is not possible to determine the latest version available." -msgstr "" +msgstr "Не е възможно да се определи най-новата налична версия." -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" +"Неочаквана грешка при опит да се определи най-новата налична версия. Уверете" +" се, че вашата инсталация има връзка с интернет; %s" + +#: views.py:38 msgid "Your version is up-to-date." -msgstr "" +msgstr "Вашата версия е актуална." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" -msgstr "" +msgstr "Записи за група зависимости: %s" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." -msgstr "" +msgstr "Група %s не е намерена." -#: views.py:75 +#: views.py:81 msgid "Dependency groups" -msgstr "" +msgstr "Групи зависимости" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" -msgstr "" +msgstr "Група зависимостите и запис: %(group)s, %(entry)s" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." -msgstr "" +msgstr "Запис %s не е намерен." -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" -msgstr "" +msgstr "Лицензи за други пакети" diff --git a/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.mo index 56711860e4..931f5b5b1e 100644 Binary files a/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.mo differ 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 2e104c8529..152c10d379 100644 --- a/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/bs_BA/LC_MESSAGES/django.po @@ -5,17 +5,17 @@ # # Translators: # www.ping.ba , 2019 -# Atdhe Tabaku , 2019 # Roberto Rosario, 2019 +# Atdhe Tabaku , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Roberto Rosario, 2019\n" +"Last-Translator: Atdhe Tabaku , 2019\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (https://www.transifex.com/rosarior/teams/13584/bs_BA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,134 +23,144 @@ 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:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Labela" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Interno ime" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Opis" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Tip" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Verzija" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Dokumentacija" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Ime" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Nijedno" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -235,7 +245,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Proveravanje za ažuriranje" @@ -266,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 "" @@ -287,34 +297,41 @@ msgstr "Verzija koju koristite je zastarela. Najnovija verzija je %s" msgid "It is not possible to determine the latest version available." msgstr "Nije moguće odrediti najnoviju verziju koja je dostupna." -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Vaša verzija je ažurna." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Ostale license za pakete" diff --git a/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.mo index 28ff32ad15..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 00e1741ff7..0c9b5e055c 100644 --- a/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/cs/LC_MESSAGES/django.po @@ -5,15 +5,16 @@ # # Translators: # Jiri Fait , 2019 +# Michal Švábík , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Jiri Fait , 2019\n" +"Last-Translator: Michal Švábík , 2019\n" "Language-Team: Czech (https://www.transifex.com/rosarior/teams/13584/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,204 +22,229 @@ 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:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" -msgstr "" +msgstr "Závislosti" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Označení" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" -msgstr "" +msgstr "Vnitřní název" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" -msgstr "" +msgstr "Popis" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" -msgstr "" +msgstr "Typ" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" -msgstr "" +msgstr "Další údaje" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" -msgstr "" +msgstr "Deklarováno uživatelem" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" -msgstr "" +msgstr "Verze" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" -msgstr "" +msgstr "Prostředí" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" -msgstr "" +msgstr "Kontrola" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" +"Prostředí používané k vytváření distribuovatelných balíčků softwaru. Koncoví" +" uživatelé mohou v tomto prostředí ignorovat chybějící závislosti." -#: classes.py:68 +#: classes.py:71 msgid "Build" -msgstr "" +msgstr "Sestavení" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" +"Prostředí používané pro vývojáře k provádění změn kódu. Koncoví uživatelé " +"mohou v tomto prostředí ignorovat chybějící závislosti." -#: classes.py:74 +#: classes.py:77 msgid "Development" -msgstr "" +msgstr "Vývoj" -#: classes.py:78 +#: classes.py:81 +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" +msgstr "Dokumentace" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" +"Normální prostředí pro koncové uživatele. Chybějící závislost v tomto " +"prostředí bude mít za následek problémy a chyby při běžném používání." -#: classes.py:80 +#: classes.py:89 msgid "Production" -msgstr "" +msgstr "Produkce" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" +"Prostředí použité při spuštění testovacího prostředí k ověření funkčnosti " +"kódu. Závislosti v tomto prostředí nejsou nutné pro normální využití v " +"produkčním prostředí." -#: classes.py:87 +#: classes.py:96 msgid "Testing" -msgstr "" +msgstr "Testování" -#: classes.py:172 +#: classes.py:193 msgid "Name" -msgstr "" +msgstr "název" -#: classes.py:173 +#: classes.py:194 msgid "App" -msgstr "" +msgstr "Aplikace" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." -msgstr "" +msgstr "Je třeba zadat alespoň jeden: app_label nebo modul." -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." -msgstr "" +msgstr "Závislost \"%s\" je již zaregistrována." -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " -msgstr "" +msgstr "Instalace balíčku: %s ..." -#: classes.py:310 +#: classes.py:331 msgid "Already installed." -msgstr "" +msgstr "Už nainstalováno." -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." -msgstr "" +msgstr "Kompletní." -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" -msgstr "" +msgstr "Nainstalovaná správná verze" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" -msgstr "" +msgstr "Chybějící nebo nesprávná verze" -#: classes.py:379 +#: classes.py:400 msgid "None" -msgstr "" +msgstr "Žádný" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" -msgstr "" +msgstr "Nespecifikováno" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " -msgstr "" +msgstr "Opravné soubory ..." #: classes.py:440 msgid "Executables that are called directly by the code." -msgstr "" +msgstr "Spustitelné soubory, které jsou volány přímo kódem." #: classes.py:442 msgid "Binary" -msgstr "" +msgstr "Binární" #: classes.py:459 msgid "" "JavaScript libraries downloaded the from NPM registry and used for front-end" " functionality." msgstr "" +"Knihovny JavaScriptu stažené z registru NPM a použily se pro front-end " +"funkce." #: classes.py:462 msgid "JavaScript" -msgstr "" +msgstr "JavaScript" #: classes.py:496 classes.py:729 msgid "Downloading... " -msgstr "" +msgstr "Stahování ..." #: classes.py:499 msgid "Verifying... " -msgstr "" +msgstr "Ověření ..." #: classes.py:502 classes.py:732 msgid "Extracting... " -msgstr "" +msgstr "Probíhá extrakce ..." #: classes.py:681 msgid "Python packages downloaded from PyPI." -msgstr "" +msgstr "Python balíčky stažené z PyPI." #: classes.py:683 msgid "Python" -msgstr "" +msgstr "Python" #: classes.py:710 msgid "Fonts downloaded from fonts.googleapis.com." -msgstr "" +msgstr "Fonty stažené z fonts.googleapis.com." #: classes.py:712 msgid "Google font" -msgstr "" +msgstr "Písmo Google" #: classes.py:791 msgid "Declared in app" -msgstr "" +msgstr "Deklarováno v aplikaci" #: classes.py:792 msgid "Show dependencies by the app that declared them." -msgstr "" +msgstr "Zobrazit závislosti podle aplikace, která je deklarovala." #: classes.py:796 msgid "Class" -msgstr "" +msgstr "Třída" #: classes.py:797 msgid "" "Show the different classes of dependencies. Classes are usually divided by " "language or the file types of the dependency." msgstr "" +"Zobrazit různé třídy závislostí. Třídy jsou obvykle rozděleny podle jazyka " +"nebo typu souboru závislosti." #: classes.py:802 msgid "State" -msgstr "" +msgstr "Stav" #: classes.py:803 msgid "" @@ -226,24 +252,29 @@ msgid "" "dependencies is installed and is of a correct version. False means the " "dependencies is missing or an incorrect version is present." msgstr "" +"Zobrazit různé stavy závislostí. True znamená, že jsou nainstalovány " +"závislosti a mají správnou verzi. False znamená, že chybí závislosti nebo je" +" přítomna nesprávná verze." #: classes.py:810 msgid "" "Dependencies required for an environment might not be required for another. " "Example environments: Production, Development." msgstr "" +"Závislosti vyžadované pro prostředí nemusí být vyžadovány pro jiné. Příklad " +"prostředí: Výroba, vývoj." -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" -msgstr "" +msgstr "Kontrola aktualizací" #: links.py:17 msgid "Groups" -msgstr "" +msgstr "Skupiny" #: links.py:25 msgid "Entries" -msgstr "" +msgstr "Příspěvky" #: links.py:33 msgid "Details" @@ -251,68 +282,81 @@ msgstr "Detail" #: links.py:38 msgid "Dependencies licenses" -msgstr "" +msgstr "Licence závislostí" #: management/commands/generaterequirements.py:16 msgid "" "Comma separated names of dependencies to exclude from the list generated." msgstr "" +"Čárkami oddělené názvy závislostí, které mají být vyloučeny z vygenerovaného" +" seznamu." #: management/commands/generaterequirements.py:22 msgid "" "Comma separated names of dependencies to show in the list while excluding " "every other one." 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 "" +msgstr "Zpracovat konkrétní aplikaci." -#: management/commands/installjavascript.py:19 +#: management/commands/installdependencies.py:19 msgid "Force installation even if already installed." -msgstr "" +msgstr "Vynutit instalaci, i když již byla nainstalována." #: permissions.py:10 msgid "View dependencies" -msgstr "" +msgstr "Zobrazit závislosti" #: views.py:23 #, python-format msgid "The version you are using is outdated. The latest version is %s" -msgstr "" +msgstr "Verze, kterou používáte, je zastaralá. Poslední verze je %s" #: views.py:28 msgid "It is not possible to determine the latest version available." -msgstr "" +msgstr "Není možné určit nejnovější dostupnou verzi." -#: views.py:32 +#: views.py:33 +#, python-format +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." -msgstr "" +msgstr "Vaše verze je aktuální." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" -msgstr "" +msgstr "Položky pro skupinu závislostí: %s" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." -msgstr "" +msgstr "Skupina %s nebyla nalezena." -#: views.py:75 +#: views.py:81 msgid "Dependency groups" -msgstr "" +msgstr "Skupiny závislostí" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" -msgstr "" +msgstr "Skupina závislostí a položka: %(group)s, %(entry)s" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." -msgstr "" +msgstr "Záznam %s nebyl nalezen." -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" -msgstr "" +msgstr "Licence na další balíčky" 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 8395e3be69..799efc538c 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,134 +21,144 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Etiket" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Beskrivelse" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Type" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Version" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Navn" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Ingen" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -233,7 +243,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -264,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 "" @@ -285,34 +295,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "" diff --git a/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.mo index 65e7a15ea5..88c73bb934 100644 Binary files a/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.mo differ 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 6333264626..0bc5ed2688 100644 --- a/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/de_DE/LC_MESSAGES/django.po @@ -8,15 +8,17 @@ # Berny , 2019 # Felix , 2019 # Mathias Behrle , 2019 +# Marvin Haschker , 2019 +# Jesaja Everling , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Mathias Behrle , 2019\n" +"Last-Translator: Jesaja Everling , 2019\n" "Language-Team: German (Germany) (https://www.transifex.com/rosarior/teams/13584/de_DE/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,77 +26,93 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "Abhängigkeiten" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Bezeichner" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Interner Name" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Beschreibung" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Typ" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "Andere Daten" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "Deklariert von" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Version" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "Umgebung" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "Überprüfen" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" +"Umgebung, in der installierbare Pakete der Software erstellt werden können. " +"Endbenutzer können fehlende Abhängigkeiten in dieser Umgebung ignorieren." -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "Build" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" +"Umgebung für Entwickler. Endbenutzer können fehlende Abhängigkeiten in " +"dieser Umgebung ignorieren." -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "Entwicklung" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Dokumentation" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" +"Normale Umgebung für Endbenutzer. Fehlende Abhängigkeiten werden in dieser " +"Umgebung Fehler im normalen Gebrauch verursachen." -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "Produktion" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " @@ -104,60 +122,60 @@ msgstr "" "Abhängigkeiten dieser Umgebung werden nicht im normalen Produktivbetrieb " "benötigt." -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "Testing" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Name" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "App" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" "Es muss wenigstens eines von beiden angegeben werden: app_label oder Modul." -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "Abhängigkeit \"%s\" bereits registriert." -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "Installiere Paket: %s... " -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "Bereits installiert." -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "Vollständig." -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "Installierte und korrekte Version" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "Fehlende oder inkorrekte Version" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Keine" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "Nicht spezifiziert" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " -msgstr "" +msgstr "Dateien werden gepatcht ..." #: classes.py:440 msgid "Executables that are called directly by the code." @@ -172,10 +190,12 @@ msgid "" "JavaScript libraries downloaded the from NPM registry and used for front-end" " functionality." msgstr "" +"JavaScript Bibliotheken, die aus der NPM Registry heruntergeladen werden und" +" für die Front-End-Funktionalität benötigt werden." #: classes.py:462 msgid "JavaScript" -msgstr "" +msgstr "JavaScript" #: classes.py:496 classes.py:729 msgid "Downloading... " @@ -199,11 +219,11 @@ msgstr "Python" #: classes.py:710 msgid "Fonts downloaded from fonts.googleapis.com." -msgstr "" +msgstr "Von fonts.googleapis.com heruntergeladene Schriftarten." #: classes.py:712 msgid "Google font" -msgstr "" +msgstr "Google-Schriftart" #: classes.py:791 msgid "Declared in app" @@ -211,7 +231,7 @@ msgstr "In App deklariert" #: classes.py:792 msgid "Show dependencies by the app that declared them." -msgstr "" +msgstr "Abhängigkeiten nach der deklarierenden App anzeigen." #: classes.py:796 msgid "Class" @@ -222,6 +242,8 @@ msgid "" "Show the different classes of dependencies. Classes are usually divided by " "language or the file types of the dependency." msgstr "" +"Unterschiedliche Klassen von Abhängigkeiten anzeigen. Klassen sind " +"üblicherweise unterteilt nach Sprache oder Dateityp der Abhängigkeit." #: classes.py:802 msgid "State" @@ -233,14 +255,20 @@ msgid "" "dependencies is installed and is of a correct version. False means the " "dependencies is missing or an incorrect version is present." msgstr "" +"Die unterschiedlichen Zustände von Abhängigkeiten anzeigen. True (Wahr) " +"bedeutet das eine Abhängigkeit mit der korrekten Version installiert ist. " +"False (Falsch) bedeutet eine fehlende oder inkorrekte Version der " +"Abhängigkeit." #: classes.py:810 msgid "" "Dependencies required for an environment might not be required for another. " "Example environments: Production, Development." msgstr "" +"Abhängigkeiten für eine Umgebung müssen nicht unbedingt für eine andere " +"erforderlich sein, z. B. Produktion im Vergleich zu Entwicklung." -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Nach Updates suchen" @@ -275,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." @@ -296,34 +324,41 @@ msgstr "Ihre Version ist veraltet. Die neueste Version ist %s" msgid "It is not possible to determine the latest version available." msgstr "Ermittlung der aktuellsten verfügbaren Version nicht möglich." -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Ihre Version ist auf dem neuesten Stand." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "Einträge für Abhängigkeitsgruppe %s" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "Gruppe %s nicht gefunden." -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "Abhängigkeitsgruppen" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "Abhängigkeitsgruppe und Eintrag: %(group)s, %(entry)s" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "Eintrag %s nicht gefunden." -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Andere Paket-Lizenzen" diff --git a/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.mo index 1fb50cdc6b..aef65427cd 100644 Binary files a/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/el/LC_MESSAGES/django.po index bebe28c448..b910a128f6 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,134 +21,144 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Ετικέτα" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Εσωτερικό όνομα" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Περιγραφή" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Τύπος" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Έκδοση" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Τεκμηρίωση" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Όνομα" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Κανένα" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -233,7 +243,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Έλεγχος για ενημερώσεις" @@ -264,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 "" @@ -287,34 +297,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Έχετε την πιο πρόσφατη έκδοση." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Άδειες χρήσης λοιπών πακέτων" diff --git a/mayan/apps/dependencies/locale/en/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/en/LC_MESSAGES/django.po index ea662bfa04..e2c288d108 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,134 +17,144 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -229,7 +239,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -260,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 "" @@ -281,34 +291,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure " +"your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "" diff --git a/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.mo index 5df5f3f725..796159b4fc 100644 Binary files a/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/es/LC_MESSAGES/django.po index e03d12491d..ffa522517d 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,47 +23,47 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "Dependencias" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Etiqueta" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Nombre interno" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Descripción" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Tipo" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "Otros datos" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "Declarado por" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Versión" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "Ambiente" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "Comprobar" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." @@ -72,11 +72,11 @@ msgstr "" "software. Los usuarios finales pueden ignorar las dependencias que faltan en" " este entorno." -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "Construir" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." @@ -85,11 +85,23 @@ msgstr "" "Los usuarios finales pueden ignorar las dependencias que faltan en este " "entorno." -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "Desarrollo" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" +"Entorno utilizado para construir la documentación. Los usuarios finales " +"pueden ignorar las dependencias que faltan en este entorno." + +#: classes.py:83 +msgid "Documentation" +msgstr "Documentación" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." @@ -97,11 +109,11 @@ msgstr "" "Ambiente normal para usuarios finales. Una dependencia que falta en este " "entorno dará lugar a problemas y errores durante el uso normal." -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "Producción" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " @@ -111,57 +123,57 @@ msgstr "" "funcionalidad del código. Las dependencias en este entorno no son necesarias" " para el uso normal de producción." -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "Pruebas" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Nombre" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "Aplicación" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "Es necesario especificar al menos uno: app_label o módulo." -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "Dependencia \"%s\" ya registrada." -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "Instalando el paquete: %s ..." -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "Ya instalado." -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "Completado." -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "Versión instalada y correcta." -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "Versión faltante o incorrecta" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Ninguno" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "No especificado" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "Parcheando archivos..." @@ -255,7 +267,7 @@ msgstr "" "Las dependencias necesarias para un entorno pueden no ser necesarias para " "otro. Ejemplos de entornos: Producción, Desarrollo." -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Verificar actualizaciones" @@ -290,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." @@ -311,34 +323,43 @@ msgstr "La versión que está utilizando está obsoleta. La última versión es msgid "It is not possible to determine the latest version available." msgstr "No es posible determinar la última versión disponible." -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" +"Error inesperado al intentar determinar la última versión disponible. " +"Asegúrese de que su instalación tenga conexión a Internet; %s" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Su versión está al díá." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "Entradas para el grupo de dependencia: %s" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "Grupo %s no encontrado." -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "Grupos de dependencia" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "Grupo de dependencia y entrada: %(group)s, %(entry)s" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "Entrada %s no encontrada." -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Licencias de otros paquetes" diff --git a/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.mo index 47d09ad509..7c497b11eb 100644 Binary files a/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.po index 42d4ec9d1c..4f1c74c471 100644 --- a/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/fa/LC_MESSAGES/django.po @@ -4,17 +4,17 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Mehdi Amani , 2019 # Roberto Rosario, 2019 +# Mehdi Amani , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Roberto Rosario, 2019\n" +"Last-Translator: Mehdi Amani , 2019\n" "Language-Team: Persian (https://www.transifex.com/rosarior/teams/13584/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,134 +22,144 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "برچسب" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "نام داخلی" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "توضیحات" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "نوع" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "نسخه" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "مستندات" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "نام" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "هیچ یک" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -234,7 +244,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "بررسی برای به روز رسانی" @@ -265,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 "" @@ -286,34 +296,41 @@ msgstr "نسخه ای که استفاده می کنید قدیمی است. آخ msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "نسخه شما به روز است." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "مجوزهای دیگر بسته" diff --git a/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.mo index 94ae08ac01..c928417a94 100644 Binary files a/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.po index 187b815c59..a63a5fc533 100644 --- a/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/fr/LC_MESSAGES/django.po @@ -7,17 +7,17 @@ # Roberto Rosario, 2019 # Thierry Schott , 2019 # Yves Dubois , 2019 -# Christophe CHAUVET , 2019 # Frédéric Sheedy , 2019 +# Christophe CHAUVET , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Frédéric Sheedy , 2019\n" +"Last-Translator: Christophe CHAUVET , 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" @@ -25,57 +25,57 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "Dépendances" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Libellé" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Nom interne" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Description" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Type" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "Autre données" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "Déclaré par" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Version" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "Environnement" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "Vérifier" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "Build" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." @@ -84,11 +84,21 @@ msgstr "" "utilisateurs finaux peuvent ignorer les dépendances manquantes dans cet " "environnement." -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "Développement" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Documentation" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." @@ -97,11 +107,11 @@ msgstr "" "dans cet environnement entraînera des problèmes et des erreurs lors d'une " "utilisation normale." -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "Production" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " @@ -111,59 +121,59 @@ msgstr "" "la fonctionnalité du code. Les dépendances dans cet environnement ne sont " "pas nécessaires pour une utilisation normale en production." -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "Test" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Nom" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "App" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "Besoin de spécifier au moins un: app_label ou module." -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "La dépendance \"%s\" est déjà enregistrée." -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "Installation du paquet: %s ..." -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "Déjà installé." -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "Complété." -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "Version installée et correcte" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "Version manquante ou incorrecte" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Aucun" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "Non spécifié" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " -msgstr "" +msgstr "Modification des fichiers ..." #: classes.py:440 msgid "Executables that are called directly by the code." @@ -178,6 +188,8 @@ msgid "" "JavaScript libraries downloaded the from NPM registry and used for front-end" " functionality." msgstr "" +"Les bibliothèques JavaScript sont téléchargées à partir du NPM et utilisé " +"pour les fonctionnalités front-end." #: classes.py:462 msgid "JavaScript" @@ -217,7 +229,7 @@ msgstr "Déclaré dans l'application" #: classes.py:792 msgid "Show dependencies by the app that declared them." -msgstr "" +msgstr "Afficher les dépendances par l'application qui les a déclarées." #: classes.py:796 msgid "Class" @@ -245,8 +257,10 @@ msgid "" "Dependencies required for an environment might not be required for another. " "Example environments: Production, Development." msgstr "" +"Les dépendances requises pour un environnement peuvent ne pas l'être pour un" +" autre. Exemples d'environnements: production, développement." -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Vérifier les mises à jour" @@ -280,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é." @@ -301,34 +315,41 @@ msgstr "La version que vous utilisez est obsolète. La dernière version est %s" msgid "It is not possible to determine the latest version available." msgstr "Il n'est pas possible de déterminer la dernière disponible" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Votre version est à jour" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "Entrées pour le groupe de dépendance: %s" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "Groupe %s introuvable." -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "Groupes de dépendance" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "Groupe de dépendance et entrée: %(group)s, %(entry)s" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "Entrée %s introuvable." -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Licences des bibliothèques tierces" diff --git a/mayan/apps/dependencies/locale/hu/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/hu/LC_MESSAGES/django.po index b7ef624831..7032b92b0f 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -22,134 +22,144 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Cimke" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Leírás" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Típus" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Verzió" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Név" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Semmi" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -234,7 +244,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -265,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 "" @@ -286,34 +296,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "" diff --git a/mayan/apps/dependencies/locale/id/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/id/LC_MESSAGES/django.po index 4f715f0fce..75832df243 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -22,134 +22,144 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Label" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Nama internal" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Deskripsi" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Tipe" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Nihil" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -234,7 +244,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -265,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 "" @@ -286,34 +296,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "" diff --git a/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.mo index d024276827..fb4aef56e7 100644 Binary files a/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.po index 6d374c9a77..f2fdde4c2a 100644 --- a/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/it/LC_MESSAGES/django.po @@ -6,17 +6,17 @@ # Translators: # Roberto Rosario, 2019 # Pierpaolo Baldan , 2019 -# Marco Camplese , 2019 # Giovanni Tricarico , 2019 +# Marco Camplese , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Giovanni Tricarico , 2019\n" +"Last-Translator: Marco Camplese , 2019\n" "Language-Team: Italian (https://www.transifex.com/rosarior/teams/13584/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,134 +24,144 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Etichetta" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Nome interno" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Descrizione " -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Tipo" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Versione" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Documentazione" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Nome " -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Nessuno" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -236,7 +246,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Controlla aggiornamenti" @@ -267,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 "" @@ -288,34 +298,41 @@ msgstr "La versione che stai usando non è l'ultima. L'ultima versione è %s" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Sei alla versione più recente" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Licenze altri pacchetti" diff --git a/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.mo index 5571d652ae..b507d5d5c6 100644 Binary files a/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/lv/LC_MESSAGES/django.po index b688382e16..19c8692aad 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,47 +21,47 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "Atkarības" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Etiķete" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Iekšējais nosaukums" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Apraksts" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Tips" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "Citi dati" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "Deklarēja" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Versija" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "Vide" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "Pārbaudiet" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." @@ -69,11 +69,11 @@ msgstr "" "Vide, ko izmanto programmatūras izplatāmo pakešu veidošanai. Gala lietotāji " "var ignorēt trūkstošās atkarības šajā vidē." -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "Būvēt" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." @@ -81,11 +81,21 @@ msgstr "" "Vide, ko izstrādātāji izmanto, lai veiktu izmaiņas kodā. Gala lietotāji var " "ignorēt trūkstošās atkarības šajā vidē." -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "Attīstība" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Dokumentācija" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." @@ -93,11 +103,11 @@ msgstr "" "Normāla vide gala lietotājiem. Trūkstošas atkarības šajā vidē radīs " "problēmas un kļūdas normālas lietošanas laikā." -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "Ražošana" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " @@ -107,57 +117,57 @@ msgstr "" "funkcionalitāti. Atšķirības šajā vidē nav nepieciešamas normālai ražošanas " "izmantošanai." -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "Testēšana" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Nosaukums" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "App" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "Nepieciešams norādīt vismaz vienu: app_label vai moduli." -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "Atkarība \"%s\" jau ir reģistrēta." -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "Pakotnes instalēšana: %s ..." -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "Jau instalēta." -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "Pabeigts." -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "Instalēta un pareiza versija" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "Trūkst vai ir nepareiza versija" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Nav neviens" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "Nav precizēts" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "Notiek failu lāpīšana ..." @@ -250,7 +260,7 @@ msgstr "" "Atkarības, kas nepieciešamas vienai videi, var nebūt nepieciešama citai. " "Vides paraugi: Produkcijas vide, Izstrādes vide." -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Meklēt atjauninājumus" @@ -284,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." @@ -305,34 +315,41 @@ msgstr "Lietotā versija ir novecojusi. Jaunākā versija ir %s" msgid "It is not possible to determine the latest version available." msgstr "Nav iespējams noteikt jaunāko pieejamo versiju." -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Jūsu versija ir atjaunināta." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "Ieraksti atkarības grupai: %s" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "Grupa %s nav atrasta." -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "Atkarības grupas" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "Atkarības grupa un ieraksts: %(group)s, %(entry)s" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "Ieraksts %s nav atrasts." -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Citas paketes licences" 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 00c7794341..66608a88b6 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,134 +23,144 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Label" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Omschrijving" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Soort" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Versie" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Naam" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Geen" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -235,7 +245,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -266,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 "" @@ -287,34 +297,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Andere pakketlicensies" diff --git a/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.mo index 0b4756c0c1..d598690fb6 100644 Binary files a/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/pl/LC_MESSAGES/django.po index 7134ae5acd..69bc41fd2b 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -24,134 +24,144 @@ 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:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Etykieta" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Nazwa wewnętrzna" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Opis" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Typ" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Wersja" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Dokumentacja" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Nazwa" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Brak" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -236,7 +246,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Sprawdź aktualizacje" @@ -267,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 "" @@ -288,34 +298,41 @@ msgstr "Ta wersja programu jest nieaktualna. Najświeższą wersją jest %s" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Wersja programu jest aktualna." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Pozostałe licencje" diff --git a/mayan/apps/dependencies/locale/pt/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/pt/LC_MESSAGES/django.po index cb90145ed3..446ed89487 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -23,134 +23,144 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Nome" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Descrição" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Versão" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Nome" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Nenhum" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -235,7 +245,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -266,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 "" @@ -287,34 +297,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "" diff --git a/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.mo index e707e66fe9..3c41bc367f 100644 Binary files a/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.mo differ 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 fdcbbfc7b4..1f35dff5f7 100644 --- a/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/pt_BR/LC_MESSAGES/django.po @@ -8,15 +8,16 @@ # Aline Freitas , 2019 # José Samuel Facundo da Silva , 2019 # Roberto Rosario, 2019 +# Jadson Ribeiro , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Roberto Rosario, 2019\n" +"Last-Translator: Jadson Ribeiro , 2019\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,134 +25,144 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Rótulo" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Nome interno" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Descrição" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Tipo" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Versão" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Documentação" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Nome" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Nenhum" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -236,7 +247,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Buscar atualizações" @@ -267,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 "" @@ -289,34 +300,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "Não é possível determinar a última versão disponível." -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Sua versão está atualizada." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Licenças de outros pacotes" 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 025d8e3c06..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 21475d169b..f398d675d1 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -24,47 +24,47 @@ 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:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "Dependenţe" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Conținut etichetă" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Nume intern" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Descriere" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Tip" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "Alte date" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "Declarată de" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Versiune" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "Mediu inconjurator" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "Verificare" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." @@ -72,11 +72,11 @@ msgstr "" "Mediul utilizat pentru a construi pachete distribuite ale software-ului. " "Utilizatorii finali pot ignora dependențele care lipsesc în acest mediu." -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "Build" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." @@ -84,11 +84,23 @@ msgstr "" "Mediul fost folosit de dezvoltatori pentru a face schimbări de cod. " "Utilizatorii finali pot ignora dependențele care lipsesc în acest mediu." -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "Dezvoltare" -#: classes.py:78 +#: classes.py:81 +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" +msgstr "Documentație" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." @@ -96,11 +108,11 @@ msgstr "" "Mediu normal pentru utilizatorii finali. O dependență lipsă în acest mediu " "va duce la probleme și erori în timpul utilizării normale." -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "Producție" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " @@ -110,57 +122,57 @@ msgstr "" "codului. Dependențele în acest mediu nu sunt necesare pentru utilizarea " "normală în producție." -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "Testare" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Nume" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "App" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "Trebuie să specificați cel puțin una: app_label sau modul." -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "Dependența \"%s\" deja înregistrată." -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "Instalarea pachetului: %s ..." -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "Deja instalat." -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "Complet." -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "Versiunea instalată și corectă" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "Versiune lipsă sau incorectă" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Nici unul" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "Nespecificat" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "Patching fișiere ..." @@ -254,7 +266,7 @@ msgstr "" "Este posibil ca dependențele necesare pentru un mediu să nu fie necesare " "pentru altul. Exemplu de medii: producție, dezvoltare." -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Verifică pentru actualizări" @@ -289,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." @@ -310,34 +322,43 @@ msgstr "Versiunea pe care o utilizați este depășită. Ultima versiune este %s msgid "It is not possible to determine the latest version available." msgstr "Nu este posibil să se determine cea mai recentă versiune disponibilă." -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" +"Eroare neașteptată încercând să determine ultima versiune disponibilă. " +"Asigurați-vă că instalația dvs. are o conexiune la internet; %s" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "Versiunea dvs. este actualizată." -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "Intrările pentru grupul de dependență: %s" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "Grupul %s nu a fost găsit." -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "Grupuri de dependență" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "Grupul de dependență și intrările aferente: %(group)s, %(entry)s" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "Intrarea %s nu a fost găsită." -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "Licențe pentru alte pachete" diff --git a/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.mo index a94ab8a90c..b5c3f46a7b 100644 Binary files a/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.po index 93fc960cca..666752ce92 100644 --- a/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/dependencies/locale/ru/LC_MESSAGES/django.po @@ -6,20 +6,20 @@ # Translators: # Roberto Rosario, 2019 # Sergey Glita , 2019 -# mizhgan , 2019 # panasoft , 2019 # Roman Z , 2019 # D Muzzle , 2019 # lilo.panic, 2019 +# mizhgan , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-0400\n" "PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: lilo.panic, 2019\n" +"Last-Translator: mizhgan , 2019\n" "Language-Team: Russian (https://www.transifex.com/rosarior/teams/13584/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,134 +27,144 @@ 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:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Ярлык" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Внутреннее имя" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Описание" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Тип" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Версия" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Документация" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Название" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Ничего" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -239,7 +249,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "Проверить обновления" @@ -270,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 "" @@ -291,34 +301,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" 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 28bef19c56..9f45d2e2b3 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,134 +21,144 @@ 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:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Oznaka" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Opis" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Različica" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Ime" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Brez" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -233,7 +243,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -264,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 "" @@ -285,34 +295,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "" diff --git a/mayan/apps/dependencies/locale/tr_TR/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/tr_TR/LC_MESSAGES/django.mo index 6e891a861a..e8cfb52a59 100644 Binary files a/mayan/apps/dependencies/locale/tr_TR/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/tr_TR/LC_MESSAGES/django.mo differ 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 3f88c03f51..33a2f86ff4 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -22,134 +22,144 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "Etiket" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "Dahili adı" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Açıklama" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "Tür" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Versiyon" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "Belgeleme" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "İsim" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "Yok" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -234,7 +244,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -265,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 "" @@ -286,34 +296,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" 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 197979c171..be4c53b4eb 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -22,134 +22,144 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "Mô tả" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "Phiên bản" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "Tên" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "None" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -234,7 +244,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "" @@ -265,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 "" @@ -286,34 +296,41 @@ msgstr "" msgid "It is not possible to determine the latest version available." msgstr "" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" msgstr "" diff --git a/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.mo index f7836785d2..4cfcad060c 100644 Binary files a/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.mo differ diff --git a/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.po b/mayan/apps/dependencies/locale/zh/LC_MESSAGES/django.po index a37fc4633e..77e9c4fd9c 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:26-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" @@ -21,134 +21,144 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:27 links.py:43 permissions.py:7 +#: apps.py:26 links.py:43 permissions.py:7 msgid "Dependencies" msgstr "" -#: apps.py:33 apps.py:68 apps.py:76 +#: apps.py:34 apps.py:69 apps.py:77 msgid "Label" msgstr "标签" -#: apps.py:36 +#: apps.py:37 msgid "Internal name" msgstr "内部名称" -#: apps.py:39 apps.py:71 apps.py:80 +#: apps.py:40 apps.py:72 apps.py:81 msgid "Description" msgstr "描述" -#: apps.py:43 classes.py:172 +#: apps.py:44 classes.py:193 msgid "Type" msgstr "类型" -#: apps.py:47 classes.py:174 +#: apps.py:48 classes.py:195 msgid "Other data" msgstr "" -#: apps.py:51 +#: apps.py:52 msgid "Declared by" msgstr "" -#: apps.py:55 classes.py:172 +#: apps.py:56 classes.py:193 msgid "Version" msgstr "版本" -#: apps.py:59 classes.py:173 classes.py:809 +#: apps.py:60 classes.py:194 classes.py:809 msgid "Environment" msgstr "" -#: apps.py:63 classes.py:174 +#: apps.py:64 classes.py:195 msgid "Check" msgstr "" -#: classes.py:65 +#: classes.py:68 msgid "" "Environment used for building distributable packages of the software. End " "users can ignore missing dependencies under this environment." msgstr "" -#: classes.py:68 +#: classes.py:71 msgid "Build" msgstr "" -#: classes.py:72 +#: classes.py:75 msgid "" "Environment used for developers to make code changes. End users can ignore " "missing dependencies under this environment." msgstr "" -#: classes.py:74 +#: classes.py:77 msgid "Development" msgstr "" -#: classes.py:78 +#: classes.py:81 +msgid "" +"Environment used for building the documentation. End users can ignore " +"missing dependencies under this environment." +msgstr "" + +#: classes.py:83 +msgid "Documentation" +msgstr "文档" + +#: classes.py:87 msgid "" "Normal environment for end users. A missing dependency under this " "environment will result in issues and errors during normal use." msgstr "" -#: classes.py:80 +#: classes.py:89 msgid "Production" msgstr "" -#: classes.py:84 +#: classes.py:93 msgid "" "Environment used running the test suit to verify the functionality of the " "code. Dependencies in this environment are not needed for normal production " "usage." msgstr "" -#: classes.py:87 +#: classes.py:96 msgid "Testing" msgstr "" -#: classes.py:172 +#: classes.py:193 msgid "Name" msgstr "名称" -#: classes.py:173 +#: classes.py:194 msgid "App" msgstr "" -#: classes.py:274 +#: classes.py:295 msgid "Need to specify at least one: app_label or module." msgstr "" -#: classes.py:279 +#: classes.py:300 #, python-format msgid "Dependency \"%s\" already registered." msgstr "" -#: classes.py:305 +#: classes.py:326 #, python-format msgid "Installing package: %s... " msgstr "" -#: classes.py:310 +#: classes.py:331 msgid "Already installed." msgstr "" -#: classes.py:313 classes.py:318 classes.py:322 +#: classes.py:334 classes.py:339 classes.py:343 msgid "Complete." msgstr "" -#: classes.py:348 +#: classes.py:369 msgid "Installed and correct version" msgstr "" -#: classes.py:350 +#: classes.py:371 msgid "Missing or incorrect version" msgstr "" -#: classes.py:379 +#: classes.py:400 msgid "None" msgstr "没有" -#: classes.py:388 +#: classes.py:409 msgid "Not specified" msgstr "" -#: classes.py:405 +#: classes.py:412 msgid "Patching files... " msgstr "" @@ -233,7 +243,7 @@ msgid "" "Example environments: Production, Development." msgstr "" -#: links.py:11 views.py:35 +#: links.py:11 views.py:41 msgid "Check for updates" msgstr "检查更新" @@ -264,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 "" @@ -285,34 +295,41 @@ msgstr "您使用的版本已过时。最新版本为%s" msgid "It is not possible to determine the latest version available." msgstr "无法确定最新版本。" -#: views.py:32 +#: views.py:33 +#, python-format +msgid "" +"Unexpected error trying to determine the latest version available. Make sure" +" your installation has a connection to the internet; %s" +msgstr "" + +#: views.py:38 msgid "Your version is up-to-date." msgstr "您的版本是最新的。" -#: views.py:49 +#: views.py:55 #, python-format msgid "Entries for dependency group: %s" msgstr "" -#: views.py:62 views.py:107 +#: views.py:68 views.py:113 #, python-format msgid "Group %s not found." msgstr "" -#: views.py:75 +#: views.py:81 msgid "Dependency groups" msgstr "" -#: views.py:95 +#: views.py:101 #, python-format msgid "Dependency group and entry: %(group)s, %(entry)s" msgstr "" -#: views.py:119 +#: views.py:125 #, python-format msgid "Entry %s not found." msgstr "" -#: views.py:137 +#: views.py:143 msgid "Other packages licenses" 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/mocks.py b/mayan/apps/dependencies/tests/mocks.py new file mode 100644 index 0000000000..1bc8bda2ff --- /dev/null +++ b/mayan/apps/dependencies/tests/mocks.py @@ -0,0 +1,11 @@ +from __future__ import unicode_literals + +from ..classes import Dependency, Provider + + +class TestProvider(Provider): + """Test provider""" + + +class TestDependency(Dependency): + provider_class = TestProvider diff --git a/mayan/apps/dependencies/tests/test_classes.py b/mayan/apps/dependencies/tests/test_classes.py index dbc9f6ff87..2423f02bcf 100644 --- a/mayan/apps/dependencies/tests/test_classes.py +++ b/mayan/apps/dependencies/tests/test_classes.py @@ -3,51 +3,59 @@ 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 -from ..classes import Dependency, Provider - - -class TestProvider(Provider): - """Test provider""" - - -class TestDependency(Dependency): - provider_class = TestProvider +from .mocks import TestDependency class DependencyClassTestCase(BaseTestCase): - def test_file_patching(self): - test_replace_text = 'replaced_text' + def setUp(self): + super(DependencyClassTestCase, self).setUp() - temporary_directory = mkdtemp() - path_temporary_directory = Path(temporary_directory) - path_test_file = path_temporary_directory / 'test_file.css' + self.test_replace_text = 'replaced_text' - with path_test_file.open(mode='w') as file_object: + self.temporary_directory = mkdtemp() + self.path_temporary_directory = Path(self.temporary_directory) + self.path_test_file = self.path_temporary_directory / 'test_file.css' + + with self.path_test_file.open(mode='w') as file_object: file_object.write( '@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");' ) + self.test_dependency = TestDependency( + name='test_dependency', module=__name__ + ) - dependency = TestDependency(name='test_dependency', module=__name__) + def tearDown(self): + super(DependencyClassTestCase, self).tearDown() + shutil.rmtree(self.temporary_directory, ignore_errors=True) + + def _patch_test_file(self): replace_list = [ { 'filename_pattern': '*', 'content_patterns': [ { 'search': '"https://fonts.googleapis.com/css?family=Lato:400,700,400italic"', - 'replace': test_replace_text, + 'replace': self.test_replace_text, } ] } ] - dependency.patch_files(path=temporary_directory, replace_list=replace_list) + with mute_stdout(): + self.test_dependency.patch_files( + path=self.temporary_directory, replace_list=replace_list + ) - with path_test_file.open(mode='r') as file_object: - final_text = file_object.read() + with self.path_test_file.open(mode='r') as file_object: + self.final_text = file_object.read() - shutil.rmtree(temporary_directory, ignore_errors=True) + def test_file_patching(self): + self._patch_test_file() - self.assertEqual(final_text, '@import url({});'.format(test_replace_text)) + self.assertEqual( + self.final_text, '@import url({});'.format(self.test_replace_text) + ) diff --git a/mayan/apps/dependencies/views.py b/mayan/apps/dependencies/views.py index e5d9951e7e..7e970be5be 100644 --- a/mayan/apps/dependencies/views.py +++ b/mayan/apps/dependencies/views.py @@ -28,6 +28,12 @@ class CheckVersionView(SimpleView): 'It is not possible to determine the latest version ' 'available.' ) + except Exception as exception: + message = _( + 'Unexpected error trying to determine the latest version ' + 'available. Make sure your installation has a connection to ' + 'the internet; %s' + ) % exception else: message = _('Your version is up-to-date.') 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/apps.py b/mayan/apps/django_gpg/apps.py index 2d877d5405..1bfd48d2e7 100644 --- a/mayan/apps/django_gpg/apps.py +++ b/mayan/apps/django_gpg/apps.py @@ -12,7 +12,6 @@ from mayan.apps.common.menus import ( from mayan.apps.navigation.classes import SourceColumn from .classes import KeyStub -from .dependencies import * # NOQA from .links import ( link_key_delete, link_key_detail, link_key_download, link_key_query, link_key_receive, link_key_setup, link_key_upload, link_private_keys, diff --git a/mayan/apps/django_gpg/icons.py b/mayan/apps/django_gpg/icons.py index a1d08dc42e..7e015b1e45 100644 --- a/mayan/apps/django_gpg/icons.py +++ b/mayan/apps/django_gpg/icons.py @@ -2,6 +2,17 @@ from __future__ import absolute_import, unicode_literals from mayan.apps.appearance.classes import Icon +icon_key_delete = Icon(driver_name='fontawesome', symbol='times') +icon_key_detail = Icon(driver_name='fontawesome', symbol='key') +icon_key_download = Icon(driver_name='fontawesome', symbol='download') icon_key_setup = Icon(driver_name='fontawesome', symbol='key') icon_key_upload = Icon(driver_name='fontawesome', symbol='upload') icon_keyserver_search = Icon(driver_name='fontawesome', symbol='search') +icon_private_keys = Icon( + driver_name='fontawesome-dual', primary_symbol='key', + secondary_symbol='eye-slash' +) +icon_public_keys = Icon( + driver_name='fontawesome-dual', primary_symbol='key', + secondary_symbol='eye' +) diff --git a/mayan/apps/django_gpg/links.py b/mayan/apps/django_gpg/links.py index 1c842bf720..d0d0c8621f 100644 --- a/mayan/apps/django_gpg/links.py +++ b/mayan/apps/django_gpg/links.py @@ -4,23 +4,30 @@ from django.utils.translation import ugettext_lazy as _ from mayan.apps.navigation.classes import Link -from .icons import icon_key_setup, icon_key_upload, icon_keyserver_search +from .icons import ( + icon_key_delete, icon_key_detail, icon_key_download, icon_key_setup, + icon_key_upload, icon_keyserver_search, icon_private_keys, + icon_public_keys +) from .permissions import ( permission_key_delete, permission_key_download, permission_key_receive, permission_key_view, permission_key_upload, permission_keyserver_query ) link_key_delete = Link( - args=('resolved_object.pk',), permissions=(permission_key_delete,), - tags='dangerous', text=_('Delete'), view='django_gpg:key_delete', + args=('resolved_object.pk',), icon_class=icon_key_delete, + permissions=(permission_key_delete,), tags='dangerous', text=_('Delete'), + view='django_gpg:key_delete' ) link_key_detail = Link( - args=('resolved_object.pk',), permissions=(permission_key_view,), - text=_('Details'), view='django_gpg:key_detail', + args=('resolved_object.pk',), icon_class=icon_key_detail, + permissions=(permission_key_view,), text=_('Details'), + view='django_gpg:key_detail' ) link_key_download = Link( - args=('resolved_object.pk',), permissions=(permission_key_download,), - text=_('Download'), view='django_gpg:key_download', + args=('resolved_object.pk',), icon_class=icon_key_download, + permissions=(permission_key_download,), text=_('Download'), + view='django_gpg:key_download' ) link_key_query = Link( icon_class=icon_keyserver_search, @@ -30,7 +37,7 @@ link_key_query = Link( link_key_receive = Link( args='object.key_id', keep_query=True, permissions=(permission_key_receive,), text=_('Import'), - view='django_gpg:key_receive', + view='django_gpg:key_receive' ) link_key_setup = Link( icon_class=icon_key_setup, permissions=(permission_key_view,), @@ -41,10 +48,10 @@ link_key_upload = Link( text=_('Upload key'), view='django_gpg:key_upload' ) link_private_keys = Link( - permissions=(permission_key_view,), text=_('Private keys'), - view='django_gpg:key_private_list' + icon_class=icon_private_keys, permissions=(permission_key_view,), + text=_('Private keys'), view='django_gpg:key_private_list' ) link_public_keys = Link( - permissions=(permission_key_view,), text=_('Public keys'), - view='django_gpg:key_public_list' + icon_class=icon_public_keys, permissions=(permission_key_view,), + text=_('Public keys'), view='django_gpg:key_public_list' ) 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 c82029c3e5..4ca32843ef 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -18,35 +18,35 @@ 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:33 +#: apps.py:32 msgid "Django GPG" msgstr "" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Key ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "النوع" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "" @@ -70,39 +70,39 @@ msgstr "Term" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Name, e-mail, key ID or key fingerprint to look for." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "حذف" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "التفاصيل" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "تحميل" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Query keyservers" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Key management" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "" @@ -214,78 +214,78 @@ msgstr "" msgid "Keyserver used to query for keys." msgstr "" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Import key" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "البحث" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Query key server" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" diff --git a/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.mo index 1dbe667a79..5eedff6c9a 100644 Binary files a/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.mo differ 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 1f5c34101a..01cf787038 100644 --- a/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/bg/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 # Pavlin Koldamov , 2012 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" -"PO-Revision-Date: 2019-04-14 03:23+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:27-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,37 +19,37 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" -msgstr "" +msgstr "Джанго GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Ключ ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" -msgstr "" +msgstr "Тип" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" -msgstr "" +msgstr "Дата на създаване" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" -msgstr "" +msgstr "Няма срок" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" -msgstr "" +msgstr "Срок" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" -msgstr "" +msgstr "Дължина" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" -msgstr "" +msgstr "Потребител №" #: forms.py:28 msgid "None" @@ -56,11 +57,11 @@ msgstr "Няма" #: forms.py:31 models.py:44 msgid "Fingerprint" -msgstr "" +msgstr "Пръстов отпечатък" #: forms.py:33 models.py:50 msgid "Algorithm" -msgstr "" +msgstr "Алгоритъм" #: forms.py:47 msgid "Term" @@ -68,43 +69,43 @@ msgstr "Условие" #: forms.py:48 msgid "Name, e-mail, key ID or key fingerprint to look for." -msgstr "Име, е-мейл, ключ ID или отпечатък от ключ, за преглед." - -#: links.py:15 -msgid "Delete" -msgstr "" +msgstr "Име, е-мейл, ключ № или отпечатък от ключ, за преглед." #: links.py:19 +msgid "Delete" +msgstr "Изтрийте" + +#: links.py:24 msgid "Details" msgstr "Детайли" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Сваляне" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Запитване към сървъри за ключове" -#: links.py:32 +#: links.py:39 msgid "Import" -msgstr "" +msgstr "Внос" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Управление на ключове" -#: links.py:41 +#: links.py:48 msgid "Upload key" -msgstr "" +msgstr "Ключ за качване" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" -msgstr "" +msgstr "Частни ключове" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" -msgstr "" +msgstr "Публични ключове" #: literals.py:6 literals.py:14 msgid "Public" @@ -112,7 +113,7 @@ msgstr "Публични" #: literals.py:7 literals.py:15 msgid "Secret" -msgstr "Тайна" +msgstr "Тайни" #: literals.py:23 literals.py:28 msgid "RSA" @@ -128,7 +129,7 @@ msgstr "Elgamal" #: literals.py:43 msgid "Bad signature." -msgstr "Лоша сигнатура." +msgstr "Лош подпис." #: literals.py:46 msgid "Document not signed or invalid signature." @@ -136,7 +137,7 @@ msgstr "Документът не е подписан или подписа е #: literals.py:49 msgid "Signature error." -msgstr "Подпис грешка." +msgstr "Грешка в подписа." #: literals.py:53 msgid "Document is signed but no public key is available for verification." @@ -152,27 +153,27 @@ msgstr "Документът е подписан с валиден подпис. #: models.py:32 msgid "ASCII armored version of the key." -msgstr "" +msgstr "ASCII бронирана версия на ключа." #: models.py:33 msgid "Key data" -msgstr "" +msgstr "Данни за ключа" #: models.py:61 msgid "Key" -msgstr "" +msgstr "Ключ" #: models.py:62 msgid "Keys" -msgstr "" +msgstr "Ключове" #: models.py:74 msgid "Invalid key data" -msgstr "" +msgstr "Невалидни данни за ключ" #: models.py:77 msgid "Key already exists." -msgstr "" +msgstr "Ключът вече съществува." #: permissions.py:10 msgid "Delete keys" @@ -180,7 +181,7 @@ msgstr "Изтриване на ключове" #: permissions.py:13 msgid "Download keys" -msgstr "" +msgstr "Изтегляне на ключове" #: permissions.py:16 msgid "Import keys from keyservers" @@ -188,11 +189,11 @@ msgstr "Внос ключове от сървъри за ключове" #: permissions.py:19 msgid "Use keys to sign content" -msgstr "" +msgstr "Използвайте ключове за подписване на съдържание" #: permissions.py:22 msgid "Upload keys" -msgstr "" +msgstr "Ключове за качване" #: permissions.py:25 msgid "View keys" @@ -208,84 +209,84 @@ msgstr "Директория за съхранение на ключове, ка #: settings.py:22 msgid "Path to the GPG binary." -msgstr "" +msgstr "Път към двоичния GPG." #: settings.py:26 msgid "Keyserver used to query for keys." -msgstr "" +msgstr "Сървър, използван за търсене на ключове." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" -msgstr "" +msgstr "Изтрийте ключ: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" -msgstr "" +msgstr "Данни за ключ: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" -msgstr "" +msgstr "Въведете № на ключа: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Внасяне на ключ" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" -msgstr "" +msgstr "Ключът не може да се внесе: %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" -msgstr "" +msgstr "Успешно получен ключ: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." -msgstr "" +msgstr "Използвайте имена, фамилни имена, идентификатори на ключове или имейли, за да търсите публични ключове, които да импортирате от сървъра на ключове." -#: views.py:110 +#: views.py:113 msgid "No results returned" -msgstr "" +msgstr "Няма върнати резултати" -#: views.py:112 +#: views.py:115 msgid "Key query results" -msgstr "" +msgstr "Резултати от заявка за ключ" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Търсене" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Запитване към сървър за ключове" -#: views.py:153 +#: views.py:156 msgid "Upload new key" -msgstr "" +msgstr "Качване на нов ключ" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." -msgstr "" +msgstr "Частните ключове се използват за подписване на документи. Частните ключове могат да бъдат качени само от потребителя. Изгледът за качване на частни и публични ключове е един и същ." -#: views.py:174 +#: views.py:177 msgid "There no private keys" -msgstr "" +msgstr "Няма частни ключове" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." -msgstr "" +msgstr "Публичните ключове се използват за проверка на подписани документи. Публичните ключове могат да бъдат качени от потребителя или изтеглени от сървъри на ключове. Изгледът за качване на частни и публични ключове е един и същ." -#: views.py:198 +#: views.py:201 msgid "There no public keys" -msgstr "" +msgstr "Няма публични ключове" 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 73ad353d3d..0e3d7d111f 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -19,35 +19,35 @@ 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:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "ID ključa" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Tip" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Datum kreiranja" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Ne ističe" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Rok upotrebe" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Dužina" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "ID kosrisnika" @@ -71,39 +71,39 @@ msgstr "Pojam" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Ime, e-mail, ID ključ ili otisak ključa potražiti." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Obriši" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detalji" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Download" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Upit keyservera" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Uvoz" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Upravljanje ključevima" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Otpremi ključ" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Privatan ključ" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Javni ljuč" @@ -215,78 +215,78 @@ msgstr "Put do binarnog GPG-a." msgid "Keyserver used to query for keys." msgstr "Keyserver je koristio upite za ključeve." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Izbriši ključ:%s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Detalji za ključ:%s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Uvoz ID ključa:%s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Uvedi ključ" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Nije moguće uvesti ključ:%(key_id)s;%(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Uspešno primljen ključ:%(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Ključni rezultati pretrage" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Pretraga" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Upit servera ključeva" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Uvedi novi ključ" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" diff --git a/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.mo index fd38021e49..87f5e1576b 100644 Binary files a/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.mo differ 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 aa3674e427..e3a8b4a11f 100644 --- a/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/django_gpg/locale/cs/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:08-0400\n" -"PO-Revision-Date: 2019-04-14 03:23+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:27-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,274 +18,274 @@ 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:33 +#: apps.py:32 msgid "Django GPG" -msgstr "" +msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" -msgstr "" +msgstr "ID klíče" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" -msgstr "" +msgstr "Typ" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" -msgstr "" +msgstr "Datum vytvoření" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" -msgstr "" +msgstr "Bez vypršení platnosti" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" -msgstr "" +msgstr "Datum vypršení platnosti" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" -msgstr "" +msgstr "Délka" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" -msgstr "" +msgstr "uživatelské ID" #: forms.py:28 msgid "None" -msgstr "" +msgstr "žádný" #: forms.py:31 models.py:44 msgid "Fingerprint" -msgstr "" +msgstr "Otisk" #: forms.py:33 models.py:50 msgid "Algorithm" -msgstr "" +msgstr "Algoritmus" #: forms.py:47 msgid "Term" -msgstr "" +msgstr "Termín" #: forms.py:48 msgid "Name, e-mail, key ID or key fingerprint to look for." -msgstr "" +msgstr "Hledejte jméno, e-mail, ID klíče nebo otisk prstu." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Odstranit" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detail" -#: links.py:23 +#: links.py:29 msgid "Download" -msgstr "" +msgstr "Stažení" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" -msgstr "" +msgstr "Dotazové servery klíčů" -#: links.py:32 +#: links.py:39 msgid "Import" -msgstr "" +msgstr "Import" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" -msgstr "" +msgstr "Správa klíčů" -#: links.py:41 +#: links.py:48 msgid "Upload key" -msgstr "" +msgstr "Klíč pro nahrávání" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" -msgstr "" +msgstr "Soukromé klíče" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" -msgstr "" +msgstr "Veřejné klíče" #: literals.py:6 literals.py:14 msgid "Public" -msgstr "" +msgstr "Veřejný" #: literals.py:7 literals.py:15 msgid "Secret" -msgstr "" +msgstr "Tajemství" #: literals.py:23 literals.py:28 msgid "RSA" -msgstr "" +msgstr "RSA" #: literals.py:24 msgid "DSA" -msgstr "" +msgstr "DSA" #: literals.py:29 msgid "Elgamal" -msgstr "" +msgstr "Elgamal" #: literals.py:43 msgid "Bad signature." -msgstr "" +msgstr "Špatný podpis." #: literals.py:46 msgid "Document not signed or invalid signature." -msgstr "" +msgstr "Dokument není podepsán nebo neplatný podpis." #: literals.py:49 msgid "Signature error." -msgstr "" +msgstr "Chyba podpisu." #: literals.py:53 msgid "Document is signed but no public key is available for verification." -msgstr "" +msgstr "Dokument je podepsán, ale k ověření není k dispozici žádný veřejný klíč." #: literals.py:58 msgid "Document is signed, and signature is good." -msgstr "" +msgstr "Dokument je podepsán a podpis je vpořádku." #: literals.py:61 msgid "Document is signed with a valid signature." -msgstr "" +msgstr "Dokument je podepsán platným podpisem." #: models.py:32 msgid "ASCII armored version of the key." -msgstr "" +msgstr "ASCII obrněná verze klíče." #: models.py:33 msgid "Key data" -msgstr "" +msgstr "Data klíče" #: models.py:61 msgid "Key" -msgstr "" +msgstr "Klíč" #: models.py:62 msgid "Keys" -msgstr "" +msgstr "Klíče" #: models.py:74 msgid "Invalid key data" -msgstr "" +msgstr "Neplatná datadata klíče" #: models.py:77 msgid "Key already exists." -msgstr "" +msgstr "Klíč již existuje." #: permissions.py:10 msgid "Delete keys" -msgstr "" +msgstr "Smazat klíče" #: permissions.py:13 msgid "Download keys" -msgstr "" +msgstr "Stáhněte si klíče" #: permissions.py:16 msgid "Import keys from keyservers" -msgstr "" +msgstr "Importujte klíče ze správců klíčů" #: permissions.py:19 msgid "Use keys to sign content" -msgstr "" +msgstr "Použijte klíče k podepsání obsahu " #: permissions.py:22 msgid "Upload keys" -msgstr "" +msgstr "Nahrajte klíče" #: permissions.py:25 msgid "View keys" -msgstr "" +msgstr "Zobrazit klíče" #: settings.py:10 msgid "Signatures" -msgstr "" +msgstr "Podpisy" #: settings.py:16 msgid "Home directory used to store keys as well as configuration files." -msgstr "" +msgstr "Domovský adresář používaný k ukládání klíčů a konfiguračních souborů." #: settings.py:22 msgid "Path to the GPG binary." -msgstr "" +msgstr "Cesta k binárku GPG." #: settings.py:26 msgid "Keyserver used to query for keys." -msgstr "" +msgstr "Keyserver slouží k dotazování na klíče." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" -msgstr "" +msgstr "Smazat klíč: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" -msgstr "" +msgstr "Podrobnosti pro klíč: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" -msgstr "" +msgstr "Import klíče ID: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" -msgstr "" +msgstr "Importovat klíč" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" -msgstr "" +msgstr "Nelze importovat klíč: %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" -msgstr "" +msgstr "Klíč byl úspěšně přijat: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." -msgstr "" +msgstr "Pomocí jmen, příjmení, identifikátorů klíčů nebo e-mailů můžete hledat veřejné klíče, které chcete importovat ze serveru klíčů." -#: views.py:110 +#: views.py:113 msgid "No results returned" -msgstr "" +msgstr "Nebyly nalezeny žádné výsledky" -#: views.py:112 +#: views.py:115 msgid "Key query results" -msgstr "" +msgstr "Výsledky dotazu na klíč " -#: views.py:132 +#: views.py:135 msgid "Search" -msgstr "" +msgstr "Vyhledávání" -#: views.py:134 +#: views.py:137 msgid "Query key server" -msgstr "" +msgstr "Fronta dotazu na Server klíčů" -#: views.py:153 +#: views.py:156 msgid "Upload new key" -msgstr "" +msgstr "Nahrajte nový klíč" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." -msgstr "" +msgstr "Soukromé klíče se používají k podepsání dokumentů. Soukromé klíče může nahrávat pouze uživatel. Pohled na nahrávání soukromých a veřejných klíčů je stejný." -#: views.py:174 +#: views.py:177 msgid "There no private keys" -msgstr "" +msgstr "Neexistují žádné soukromé klíče" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." -msgstr "" +msgstr "Veřejné klíče se používají k ověření podepsaných dokumentů. Veřejné klíče může uživatel nahrát nebo stáhnout ze serverů klíčů. Pohled na nahrávání soukromých a veřejných klíčů je stejný." -#: views.py:198 +#: views.py:201 msgid "There no public keys" -msgstr "" +msgstr "Neexistují žádné veřejné klíče" 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 b4bb80b93a..3182472b75 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -17,35 +17,35 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Type" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "" @@ -69,39 +69,39 @@ msgstr "" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "" -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Slet" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detaljer" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Download" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "" @@ -213,78 +213,78 @@ msgstr "" msgid "Keyserver used to query for keys." msgstr "" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Søg" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 33c06c952d..fa3c2d3cf2 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -23,35 +23,35 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Schlüssel-ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Typ" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Erstellungsdatum" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Ohne Ablaufdatum" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Ablaufdatum" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Länge" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "Benutzer-ID" @@ -75,39 +75,39 @@ msgstr "Begriff" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Name, E-Mail, Schlüssel-ID oder Fingerabdruck des Schlüssels, der gesucht wird." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Löschen" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Details" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Herunterladen" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Schlüsselserver abfragen" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Importieren" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Schlüssel-Management" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Schlüssel hochladen" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Private Schlüssel" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Öffentliche Schlüssel" @@ -219,78 +219,78 @@ msgstr "Pfad zum Programm GPG." msgid "Keyserver used to query for keys." msgstr "Server, der nach unbekannten Schlüsseln durchsucht wird." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Schlüssel löschen: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Details für Schlüssel %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Schlüssel-ID %s importieren?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Schlüssel importieren" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Schlüssel-ID %(key_id)s konnte nicht importiert werden: %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Schlüssel %(key_id)s erfolgreich heruntergeladen" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "Namen, Nachnamen, Schlüssel-IDs oder E-Mail-Adressen bei der Suche nach öffentlichen Schlüsseln verwenden, um diese vom Schlüsselserver zu importieren." -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "Keine Ergebnisse" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Ergebnis Schlüsselsuche" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Suche" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Schlüsselserver abfragen" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Neuen Schlüssel hochladen" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "Private Schlüssel werden zum Signieren von Dokumenten benutzt. Sie können ausschließlich von Benutzern hochgeladen werden. Die Ansicht zum Hochladen von privaten und öffentlichen Schlüssel ist identisch." -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "Keine privaten Schlüssel vorhanden" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "Öffentliche Schlüssel werden zur Verifzierung von signierten Dokumenten benutzt. Sie können von Benutzern hochgeladen oder von Schlüsselservern heruntergeladen werden. Die Ansicht zum Hochladen von privaten und öffentlichen Schlüssel ist identisch." -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "Keine öffentlichen Schlüssel vorhanden" 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 5cbbd13b97..c68e2c67c8 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -17,35 +17,35 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Αναγνωριστικό κλειδιού" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Τύπος" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Ημερομηνία δημιουργίας" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Χωρίς λήξη" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Ημερομηνία λήξης" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Μήκος" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "Αναγνωριστικό χρήστη" @@ -69,39 +69,39 @@ msgstr "Όρος" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Όνομα, e-mail, αναγνωριστικό κλειδιού ή δακτυλικό αποτύπωμα προς αναζήτηση." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Διαγραφή" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Λεπτομέρειες" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Κατέβασμα" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Ερώτημα προς διακομηστές" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Εισαγωγή" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Διαχείρηση κλειδιών" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Ανέβασμα κλειδιού" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Προσωπικά κλειδιά" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Δημόσια κλειδιά" @@ -213,78 +213,78 @@ msgstr "Διαδρομή εκτελέσιμου αρχείου GPG" msgid "Keyserver used to query for keys." msgstr "Διακομηστής που θα χρησιμοποιηθεί γιααναζήτηση κλειδιών." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Διαγραφή κλειδιού: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Λεπτομέρειες κλειδιού: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Εισαγωγή κλειδιού με αναγνωριστικό: %s;" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Εισαγωγή κλειδιού" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Αδυναμία εισαγωγής κλειδιού: %(key_id)s, %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Επιτυχής παραλαβή κλειδιού: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Αποτελέσματα ερωτήματος" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Αναζήτηση" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Ερώτημα προς διακομηστή κλειδιών" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Ανέβασμανέου κλειδιού" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 79b2117790..0ce37ab680 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,35 +17,35 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "" @@ -69,39 +69,39 @@ msgstr "" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "" -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "" @@ -213,78 +213,78 @@ msgstr "" msgid "Keyserver used to query for keys." msgstr "" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded " "by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded " "by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 4041e32a9d..c962834be0 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -20,35 +20,35 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Identificador de llave" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Tipo" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Fecha de creación" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "No expira" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Fecha de expiración" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Tamaño" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "ID de usuario" @@ -72,39 +72,39 @@ msgstr "Término" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Nombre, dirección de correo electrónico, identificador de llave o huella digital de llave a buscar." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Eliminar" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detalles" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Descargar" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Hacer búsquedas en servidores de llaves" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Importar" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Gestión de llaves" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Subir llave" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Llaves privadas" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Llaves públicas" @@ -216,78 +216,78 @@ msgstr "Ruta al binario GPG." msgid "Keyserver used to query for keys." msgstr "Servidor usado para buscar llaves." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Borrar llave: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Detalles para llave: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "¿Importar llave: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Importar llave" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "No se pudo importar la llave: %(key_id)s; %(error)s " -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Llave: %(key_id)s, recibida con éxito" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "Utilice nombres, apellidos, identificaciones de llaves o correos electrónicos para buscar llaves públicas para importar desde el servidor de llaves." -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "No hay resultados devueltos" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Resultado de búsqueda de llaves" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Búsqueda" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Consultar servidor de llaves" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Subir una nueva llave" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "Las llaves privadas se utilizan para firmar documentos. Las llaves privadas solo pueden ser cargadas por el usuario. La vista para cargar llaves privadas y públicas es la misma." -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "No hay llaves privadas" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "Las llaves públicas se utilizan para verificar documentos firmados. Las llaves públicas pueden ser cargadas por el usuario o descargadas de los servidores de llaves. La vista para subir llaves privadas y públicas es la misma." -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "No hay llaves publicas" 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 adc8cf24e5..9729595104 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -19,35 +19,35 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "شناسه کلید" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "نوع" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "تاریخ ایجاد" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "بدون انقضا" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "تاریخ انقضا" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "طول" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "شناسه کاربری" @@ -71,39 +71,39 @@ msgstr "ترم Term" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "نام، ایمیل، شناسه کلید ویا اثرانگشت کلید برای چستچو." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "حذف" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "جزئیات" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "دانلود" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "پرسش و یا query از سرورهای کلید" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "وارد کردن" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "مدیریت کلید" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "کلید آپلود" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "کلید شخصی" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "کلید عمومی" @@ -215,78 +215,78 @@ msgstr "محل کتایخانه باینری GPG" msgid "Keyserver used to query for keys." msgstr "Keyserver برای پرس و جو برای کلید استفاده می شود." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "کلید حذف: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "جزئیات برای کلید: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "وارد کردن شناسه کلیدی: %s" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "وارد کردن کلید" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "قادر به وارد کردن کلید نیست: %(key_id)s؛ %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "کلید موفقیت آمیز دریافت کرد: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "نتایج پرس و جو کلید" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "جستجو" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "پرسش از سرور کلید" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "بارگذاری کلید جدید" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 f871c75f40..fd923a42f5 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -22,35 +22,35 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "ID de la clé" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Type" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Date de création" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Pas d'expiration" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Date d'expiration" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Durée" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "ID Utilisateur" @@ -74,39 +74,39 @@ msgstr "Terme" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Nom, e-mail, ID de clé ou empreinte à rechercher." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Supprimer" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Détails" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Télécharger" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Interroger les serveurs de clés" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Importer" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Gestion des clés" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Uploader la clé" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Clés privées" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Clés publiques" @@ -218,78 +218,78 @@ msgstr "Chemin du binaire GPG" msgid "Keyserver used to query for keys." msgstr "Serveur de clefs à contacter" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Supprimer la clé : %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Détails de la clé : %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Importer l'identifiant de clé : %s ?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Importer la clé" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Impossible d'importer la clé : %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Clé : %(key_id)s reçue avec ssucès" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "Utilisez prénoms, noms, identifiants des clés ou courriels pour rechercher des clés publiques à importer du serveur de clés." -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "Aucun résultat retourné" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Résultats de la recherche de clé" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Chercher" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Interroger le serveur de clés" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Uploader une nouvelle clé" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "Les clés privées sont utilisées pour signer les documents. Les clés privées peuvent être téléversées par l'utilisateur. La page est la même pour téléverser une clé privée ou publique." -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "Aucune clé privée" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "Les clés publiques sont utilisées pour vérifier les documents signés. Les clés publiques peuvent être téléversées par l'utilisateur ou téléchargées du serveur de clés. La page est la même pour téléverser une clé privée ou publique." -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "Aucune clé publique" 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 6e1c8b0d00..4db14f3dc5 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -18,35 +18,35 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Kulcs ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Típus" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "Felhasználói azonosító" @@ -70,39 +70,39 @@ msgstr "Időszak" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Keresendő név, email, kulcs ID vagy kulcs lenyomat" -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Törlés" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Részletek" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Letöltés" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "" @@ -214,78 +214,78 @@ msgstr "" msgid "Keyserver used to query for keys." msgstr "" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Keresés" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 62ed89ce30..7b761d15c7 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -17,35 +17,35 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Tipe" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "" @@ -69,39 +69,39 @@ msgstr "" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "" -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Hapus" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detail" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Unduh" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "" @@ -213,78 +213,78 @@ msgstr "" msgid "Keyserver used to query for keys." msgstr "" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 a2770ffdbb..75549bf1c3 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -19,35 +19,35 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "chiave ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Tipo" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Data di creazione" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Nessuna scadenza" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Data scadenza" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Lunghezza" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "User ID" @@ -71,39 +71,39 @@ msgstr "Scadenza" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Nome, e-mail,key ID , impronte digitali da ricercare" -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Cancellare" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Dettagli" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Scarica" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Interroga l'autorità per le chiavi" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Importazione" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Gestione delle chiavi" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Carica chiave" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Chiavi private" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Chiavi pubbliche" @@ -215,78 +215,78 @@ msgstr "Percorso per il programma GPG" msgid "Keyserver used to query for keys." msgstr "Keyserver utilizzato per richiedere le chiavi." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Cancellare la chiave: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Dettagli della chiave: %s." -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Importare ID chiave: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Importa chiave" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Impossibile importare la chiave: %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Chiave ricevuta con successo: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Risultati ricerca chiave" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Cerca" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Interroga il server delle chiavi" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Carica nuova chiave" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 45e6c7a4fa..8d7f299d0c 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -18,35 +18,35 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Atslēgas ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Tips" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Izveidošanas datums" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Nav beidzies derīguma termiņš" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Derīguma termiņš" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Garums" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "Lietotāja ID" @@ -70,39 +70,39 @@ msgstr "Term" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Vārds, e-pasts, atslēgas ID vai atslēgu pirkstu nospiedums." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Dzēst" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detaļas" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Lejupielādēt" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Vaicājumu atslēgas serveri" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Importēt" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Atslēgu pārvaldība" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Augšupielādes atslēga" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Privātās atslēgas" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Publiskās atslēgas" @@ -214,78 +214,78 @@ msgstr "Ceļš uz GPG bināro." msgid "Keyserver used to query for keys." msgstr "Keyserver izmantoja atslēgvārdu vaicājumam." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Dzēst taustiņu: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Sīkāka informācija par atslēgu: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Importēt atslēgas ID: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Importēt atslēgu" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Nevar importēt atslēgu: %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Veiksmīgi saņemtais taustiņš: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "Izmantojiet vārdus, uzvārdus, atslēgas ID vai e-pastus, lai meklētu publiskās atslēgas, lai importētu no atslēgas servera." -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "Rezultāti netiek atgriezti" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Galvenie vaicājuma rezultāti" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Meklēt" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Vaicājuma atslēgu serveris" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Augšupielādējiet jaunu atslēgu" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "Privātās atslēgas tiek izmantotas, lai parakstītu dokumentus. Privātās atslēgas var augšupielādēt tikai lietotājs. Skats, lai augšupielādētu privātās un publiskās atslēgas, ir vienāds." -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "Nav privāto atslēgu" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "Publiskās atslēgas tiek izmantotas, lai pārbaudītu parakstītos dokumentus. Publiskās atslēgas var augšupielādēt lietotājs vai lejupielādēt no atslēgas serveriem. Privāto un publisko atslēgu augšupielāde ir tāda pati." -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "Nav publisko atslēgu" 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 566463bd61..0a6c218a7f 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -19,35 +19,35 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Sleutel-ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Type" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Aanmaakdatum" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Geen verloop" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Verloopdatu" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Lengte" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "Gebruikers-ID" @@ -71,39 +71,39 @@ msgstr "Voorwaarde" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Naam, e-mail, sleutel ID of sleutel vingerafdruk om naar te zoeken." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Verwijder" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Gegevens" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Download" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Raadplaag sleutelservers" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Importeren" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Sleutelbeheer" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Upload sleutel" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Privésleutels" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Openbare sleutels" @@ -215,78 +215,78 @@ msgstr "Pad naar het GPG uitvoerbestand" msgid "Keyserver used to query for keys." msgstr "Sleutelserver om naar sleutels te zoeken." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Verwijder sleutel: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Details voor sleutel: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Sleutel ID importeren: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Importeer sleutel" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Niet mogelijk om sleutel te importeren: %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Sleutel succesvol ontvangen: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Resultaten van de sleutel zoekopdracht" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Zoek" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Doorzoek sleutelserver" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Upload nieuwe sleutel" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 32d5676918..ba887d2e66 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -20,35 +20,35 @@ 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:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "ID klucza" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Typ" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Data utworzenia" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Bez wygaśnięcia" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Data wygaśnięcia" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Długość" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "ID użytkownika" @@ -72,39 +72,39 @@ msgstr "Term" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Imię i nazwisko, e-mail, key ID lub key fingerprint kluc szukać." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Usuń" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Szczegóły" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Pobierz" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Zapytaj serwery kluczy" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Importuj" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Zarządzanie kluczami" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Wyślij klucz" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Klucze prywatne" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Klucze publiczne" @@ -216,78 +216,78 @@ msgstr "Ścieżka do GPG binary." msgid "Keyserver used to query for keys." msgstr "Serwer kluczy przeznaczony do zapytań o klucze." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Usuń klucz %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Szczegóły klucza %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Zaimportować klucz z ID %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Importuj klucz" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Brak możliwości importu klucza %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Pomyślnie uzyskano klucz %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Wyniki zapytań o klucz" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Szukaj" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Serwer zapytań o klucz" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Prześlij nowy klucz" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 b2fd5e7b4f..6dd5b1c8fa 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -19,35 +19,35 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "ID da chave" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "" @@ -71,39 +71,39 @@ msgstr "Termo" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Nome, e-mail, ID da chave ou impressão digital da chave a procurar." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Eliminar" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detalhes" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Descarregar" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Consultar servidores de chaves" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Gestão de chaves" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "" @@ -215,78 +215,78 @@ msgstr "" msgid "Keyserver used to query for keys." msgstr "" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Importar chave" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Procurar" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Consultar servidor de chaves" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 8df756c4ca..71f81995ce 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -21,35 +21,35 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "ID da chave" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Tipo" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Data de criação" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Sem expiração" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Data de expiração" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Largura" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "ID de usuário" @@ -73,39 +73,39 @@ msgstr "Termo" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Nome, e-mail, ID da chave ou impressão digital da chave para procurar." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Excluir" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detalhes" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Baixar" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Consultar servidores de chaves" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Importar" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Gerenciar chaves" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Envio da chave" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Chaves privadas" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Chaves públicas" @@ -217,78 +217,78 @@ msgstr "Caminho para o binário GPG." msgid "Keyserver used to query for keys." msgstr "Servidor usado para procurar chaves." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Apagar chave: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Detalhes para chave: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Importar ID da chave: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Importar chave" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Não foi possível importar chave: %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Chave: %(key_id)s, recebida com sucesso." -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "Use nomes, sobrenomes, ID's de chaves ou e-mails para procurar chaves públicas a serem importadas do servidor de chaves." -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "Nenhum resultado retornado" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Resultados de busca de chave" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Pesquisa" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Consultar servidor de chaves" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Carregar nova chave" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "Chaves privadas são usadas para assinar documentos digitalmente. Chaves públicas podem ser carregadas apenas pelo usuário. A vista para carregamento de chaves públicas e privadas é a mesma." -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "Não há chaves privadas" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "Chaves públicas são usadas para verificar documentos assinados digitalmente. Chaves públicas podem ser carregadas pelo usuário ou baixadas de servidores de chaves. A vista para carregamento de chaves públicas e privadas é a mesma." -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "Não há chaves públicas" 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 4e9110b1b9..e35afb6f06 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -19,35 +19,35 @@ 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:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "ID cheie" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Tip" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Data creării" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Fără dată de expirare" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Data expirării" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Lungime" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "Identificatorul utilizatorului" @@ -71,39 +71,39 @@ msgstr "Termen" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Numele, e-mailul, ID-ul cheii sau amprenta cheie de căutat." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Șterge" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Detalii" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Descarcă" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Interogare keyservers" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Import" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Gestionare chei" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Încărcare chei" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Chei private" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Chei publice" @@ -215,78 +215,78 @@ msgstr "Calea către binarul GPG." msgid "Keyserver used to query for keys." msgstr "Keyserver-ul folosit la interogarea cheilor." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Ștergeți cheia: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Detalii pentru cheia: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Importați cheia cu ID-ul: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Import cheie" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Imposibil de importat cheia: %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Ați primit cu succes cheia: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "Utilizați numele, numele de familie, identitatea cheilor sau e-mailurile pentru a căuta cheile publice de importat de pe serverul de chei." -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "Nu s-au întors rezultate" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Rezultatele interogării cheii" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Căută" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Interogare keyserver" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Încărcați o cheie nouă" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "Cheile private sunt folosite pentru semnarea documentelor. Cheile private pot fi încărcate numai de utilizator. Vizualizarea pentru a încărca cheile private și publice este aceeași." -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "Nu există chei private" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "Cheile publice sunt utilizate pentru a verifica documentele semnate. Cheile publice pot fi încărcate de utilizator sau descărcate de la serverele de chei. Vizualizarea pentru a încărca cheile private și publice este aceeași." -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "Nu există chei publice" 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 c500be833a..2af32b7ea3 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -18,35 +18,35 @@ 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:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "ID ключа" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Тип" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Дата создания" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Не устаревает" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Дата окончания" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Длина" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "Идентификатор пользователя" @@ -70,39 +70,39 @@ msgstr "Term" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Имя, e-mail, ID ключа или отпечаток для поиска." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Удалить" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Детали" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Скачать" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Запрос к серверам ключей" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "Импорт" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Управление ключами" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Загрузить ключ" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Секретные ключи" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Открытые ключи" @@ -214,78 +214,78 @@ msgstr "Путь к GPG исходникам." msgid "Keyserver used to query for keys." msgstr "Сервер ключей используемый для запроса ключей." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "Удалить ключ: %s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "Подробности для ключа: %s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Получить ключ ID: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Получить ключ" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Невозможно импортировать ключ %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Успешно получен ключ: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Результаты запроса ключа" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Поиск" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Запросить сервер ключей" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Загрузить новый ключ" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 ee4cb68b52..6ae10b8edf 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -17,35 +17,35 @@ 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:33 +#: apps.py:32 msgid "Django GPG" msgstr "" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "" @@ -69,39 +69,39 @@ msgstr "" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "" -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Izbriši" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Podrobnosti" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "Prenos" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "" @@ -213,78 +213,78 @@ msgstr "" msgid "Keyserver used to query for keys." msgstr "" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 4a5b1d4ea5..ee0aaab5d5 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -19,35 +19,35 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Anahtar Kimliği" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "Tip" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "Oluşturulma tarihi" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "Süresiz" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "Son kullanma tarihi" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "Uzunluk" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "Kullanıcı adı" @@ -71,39 +71,39 @@ msgstr "Terim" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "İsim, e-posta, anahtar kimliği veya anahtar parmak izi arayın." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "Sil" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Ayrıntılar" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "İndir" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Sorgu anahtar sunucuları" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "İçeri Al" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Anahtar yönetimi" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "Yükleme anahtarı" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "Özel anahtarlar" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "Genel anahtarlar" @@ -215,78 +215,78 @@ msgstr "GPG ikili yolu." msgid "Keyserver used to query for keys." msgstr "Anahtar sunucusu anahtarları sorgulamak için kullanılır." -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "%s anahtarını sil" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "%s Anahtarın ayrıntıları: " -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "Anahtar kimliğini içe aktar: %s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Anahtarı içe aktar" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "Anahtar içe aktarılamıyor: %(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "Anahtar başarıyla alındı: %(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "Anahtar sorgu sonuçları" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Arama" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Anahtar sorgulama sunucusu" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "Yeni anahtar yükle" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 373cc07654..a7064b012e 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -18,35 +18,35 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "Key ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "" @@ -70,39 +70,39 @@ msgstr "Term" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "Name, e-mail, key ID or key fingerprint to look for." -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "Chi tiết" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "Truy vấn keyservers" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "Quản lý khóa" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "" @@ -214,78 +214,78 @@ msgstr "" msgid "Keyserver used to query for keys." msgstr "" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "Import key" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "Tìm kiếm" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "Query key server" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "" 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 528e0729d7..3df1e28e15 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-09-24 23:08-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -18,35 +18,35 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:33 +#: apps.py:32 msgid "Django GPG" msgstr "Django GPG" -#: apps.py:48 apps.py:51 forms.py:17 +#: apps.py:47 apps.py:50 forms.py:17 msgid "Key ID" msgstr "密钥ID" -#: apps.py:52 forms.py:34 models.py:55 +#: apps.py:51 forms.py:34 models.py:55 msgid "Type" msgstr "类型" -#: apps.py:54 forms.py:23 models.py:36 +#: apps.py:53 forms.py:23 models.py:36 msgid "Creation date" msgstr "创立日期" -#: apps.py:57 +#: apps.py:56 msgid "No expiration" msgstr "没有过期" -#: apps.py:58 forms.py:27 models.py:40 +#: apps.py:57 forms.py:27 models.py:40 msgid "Expiration date" msgstr "过期日期" -#: apps.py:60 forms.py:32 models.py:47 +#: apps.py:59 forms.py:32 models.py:47 msgid "Length" msgstr "长度" -#: apps.py:63 forms.py:19 models.py:52 +#: apps.py:62 forms.py:19 models.py:52 msgid "User ID" msgstr "用户ID" @@ -70,39 +70,39 @@ msgstr "术语" msgid "Name, e-mail, key ID or key fingerprint to look for." msgstr "要查找的姓名,电子邮件,密钥ID或密钥指纹。" -#: links.py:15 +#: links.py:19 msgid "Delete" msgstr "删除" -#: links.py:19 +#: links.py:24 msgid "Details" msgstr "细节" -#: links.py:23 +#: links.py:29 msgid "Download" msgstr "下载" -#: links.py:27 permissions.py:28 +#: links.py:34 permissions.py:28 msgid "Query keyservers" msgstr "查询密钥服务器" -#: links.py:32 +#: links.py:39 msgid "Import" msgstr "导入" -#: links.py:37 permissions.py:7 +#: links.py:44 permissions.py:7 msgid "Key management" msgstr "密钥管理" -#: links.py:41 +#: links.py:48 msgid "Upload key" msgstr "上传密钥" -#: links.py:44 views.py:176 +#: links.py:52 views.py:179 msgid "Private keys" msgstr "私钥" -#: links.py:48 views.py:200 +#: links.py:56 views.py:203 msgid "Public keys" msgstr "公钥" @@ -214,78 +214,78 @@ msgstr "GPG二进制文件的路径。" msgid "Keyserver used to query for keys." msgstr "用于查询密钥的密钥服务器。" -#: views.py:35 +#: views.py:37 #, python-format msgid "Delete key: %s" msgstr "删除密钥:%s" -#: views.py:51 +#: views.py:53 #, python-format msgid "Details for key: %s" msgstr "密钥详情:%s" -#: views.py:71 +#: views.py:74 #, python-format msgid "Import key ID: %s?" msgstr "导入密钥ID:%s?" -#: views.py:72 +#: views.py:75 msgid "Import key" msgstr "导入密钥" -#: views.py:81 +#: views.py:84 #, python-format msgid "Unable to import key: %(key_id)s; %(error)s" msgstr "无法导入密钥:%(key_id)s; %(error)s" -#: views.py:89 +#: views.py:92 #, python-format msgid "Successfully received key: %(key_id)s" msgstr "成功接收密钥:%(key_id)s" -#: views.py:106 +#: views.py:109 msgid "" "Use names, last names, key ids or emails to search public keys to import " "from the keyserver." msgstr "使用名字,姓氏,密钥ID或电子邮件来搜索要从密钥服务器导入的公钥。" -#: views.py:110 +#: views.py:113 msgid "No results returned" msgstr "没有结果返回" -#: views.py:112 +#: views.py:115 msgid "Key query results" msgstr "密钥查询结果" -#: views.py:132 +#: views.py:135 msgid "Search" msgstr "搜索" -#: views.py:134 +#: views.py:137 msgid "Query key server" msgstr "查询密钥服务器" -#: views.py:153 +#: views.py:156 msgid "Upload new key" msgstr "上传新密钥" -#: views.py:169 +#: views.py:172 msgid "" "Private keys are used to signed documents. Private keys can only be uploaded" " by the user.The view to upload private and public keys is the same." msgstr "私钥用于签名文档。私钥只能由用户上传。上传私钥和公钥的视图是相同的。" -#: views.py:174 +#: views.py:177 msgid "There no private keys" msgstr "没有私钥" -#: views.py:192 +#: views.py:195 msgid "" "Public keys are used to verify signed documents. Public keys can be uploaded" " by the user or downloaded from keyservers. The view to upload private and " "public keys is the same." msgstr "公钥用于验证签名文档。公钥可以由用户上传或从密钥服务器下载。上传私钥和公钥的视图是相同的。" -#: views.py:198 +#: views.py:201 msgid "There no public keys" msgstr "没有公钥" 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/literals.py b/mayan/apps/django_gpg/tests/literals.py index 3bcbe01ab3..55782e1872 100644 --- a/mayan/apps/django_gpg/tests/literals.py +++ b/mayan/apps/django_gpg/tests/literals.py @@ -4,6 +4,18 @@ import os from django.conf import settings +MOCK_SEARCH_KEYS_RESPONSE = [ + { + 'algo': u'1', + 'date': u'1311475606', + 'expires': u'1643601600', + 'keyid': u'607138F1AECC5A5CA31CB7715F3F7F75D210724D', + 'length': u'2048', + 'type': u'pub', + 'uids': [u'Roberto Rosario '] + } +] + TEST_DETACHED_SIGNATURE = os.path.join( settings.BASE_DIR, 'apps', 'django_gpg', 'tests', 'contrib', 'test_files', 'test_file.txt.asc' @@ -14,7 +26,7 @@ TEST_FILE = os.path.join( 'test_files', 'test_file.txt' ) -TEST_KEY_DATA = '''-----BEGIN PGP PRIVATE KEY BLOCK----- +TEST_KEY_PRIVATE_DATA = '''-----BEGIN PGP PRIVATE KEY BLOCK----- Version: GnuPG v1 lQO+BFbxfC8BCACnUZoD96W4+CSIaU9G8I08kXu2zJLzy2XgUtwLx8VQ8dOHr0E/ @@ -74,9 +86,9 @@ h4oCbUV5JHhOyB+89Y1w8haFU9LrgOER2kXff1xU6wMfLdcO5ApV/sRJcNdYL7Cg =JZ5G -----END PGP PRIVATE KEY BLOCK-----''' -TEST_KEY_ID = '4125E9C571F378AC' -TEST_KEY_FINGERPRINT = '6A24574E0A35004CDDFD22704125E9C571F378AC' -TEST_KEY_PASSPHRASE = 'testpassphrase' +TEST_KEY_PRIVATE_ID = '4125E9C571F378AC' +TEST_KEY_PRIVATE_FINGERPRINT = '6A24574E0A35004CDDFD22704125E9C571F378AC' +TEST_KEY_PRIVATE_PASSPHRASE = 'testpassphrase' TEST_KEYSERVERS = ['pool.sks-keyservers.net'] diff --git a/mayan/apps/django_gpg/tests/mixins.py b/mayan/apps/django_gpg/tests/mixins.py index 82bf007147..edf32185af 100644 --- a/mayan/apps/django_gpg/tests/mixins.py +++ b/mayan/apps/django_gpg/tests/mixins.py @@ -2,9 +2,50 @@ from __future__ import unicode_literals from ..models import Key -from .literals import TEST_KEY_DATA +from .literals import TEST_KEY_PRIVATE_DATA + + +class KeyAPIViewTestMixin(object): + def _request_test_key_create_view(self): + return self.post( + viewname='rest_api:key-list', data={ + 'key_data': TEST_KEY_PRIVATE_DATA + } + ) + + def _request_test_key_delete_view(self): + return self.delete( + viewname='rest_api:key-detail', kwargs={ + 'pk': self.test_key_private.pk + } + ) + + def _request_test_key_detail_view(self): + return self.get( + viewname='rest_api:key-detail', kwargs={ + 'pk': self.test_key_private.pk + } + ) class KeyTestMixin(object): - def _create_test_key(self): - self.test_key = Key.objects.create(key_data=TEST_KEY_DATA) + def _create_test_key_private(self): + self.test_key_private = Key.objects.create( + key_data=TEST_KEY_PRIVATE_DATA + ) + + +class KeyViewTestMixin(object): + def _request_test_key_download_view(self): + return self.get( + viewname='django_gpg:key_download', kwargs={ + 'pk': self.test_key_private.pk + } + ) + + def _request_test_key_upload_view(self): + return self.post( + viewname='django_gpg:key_upload', data={ + 'key_data': TEST_KEY_PRIVATE_DATA + } + ) diff --git a/mayan/apps/django_gpg/tests/mocks.py b/mayan/apps/django_gpg/tests/mocks.py new file mode 100644 index 0000000000..66c3ba5ac6 --- /dev/null +++ b/mayan/apps/django_gpg/tests/mocks.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + +from .literals import TEST_RECEIVE_KEY, TEST_SEARCH_FINGERPRINT + +MOCK_SEARCH_KEYS_RESPONSE = [ + { + 'algo': u'1', + 'date': u'1311475606', + 'expires': u'1643601600', + 'keyid': u'607138F1AECC5A5CA31CB7715F3F7F75D210724D', + 'length': u'2048', + 'type': u'pub', + 'uids': [u'Roberto Rosario '] + } +] + + +def mock_recv_keys(self, keyserver, *keyids): + class ImportResult(object): + count = 1 + fingerprints = [TEST_SEARCH_FINGERPRINT] + + self.import_keys(TEST_RECEIVE_KEY) + + return ImportResult() diff --git a/mayan/apps/django_gpg/tests/test_api.py b/mayan/apps/django_gpg/tests/test_api.py index 1f976e1107..3a6b5fa849 100644 --- a/mayan/apps/django_gpg/tests/test_api.py +++ b/mayan/apps/django_gpg/tests/test_api.py @@ -2,34 +2,15 @@ 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 ( permission_key_delete, permission_key_upload, permission_key_view ) -from .literals import TEST_KEY_DATA, TEST_KEY_FINGERPRINT -from .mixins import KeyTestMixin - - -class KeyAPIViewTestMixin(object): - def _request_test_key_create_view(self): - return self.post( - viewname='rest_api:key-list', data={ - 'key_data': TEST_KEY_DATA - } - ) - - def _request_test_key_delete_view(self): - return self.delete( - viewname='rest_api:key-detail', kwargs={'pk': self.test_key.pk} - ) - - def _request_test_key_detail_view(self): - return self.get( - viewname='rest_api:key-detail', kwargs={'pk': self.test_key.pk} - ) +from .literals import TEST_KEY_PRIVATE_FINGERPRINT +from .mixins import KeyAPIViewTestMixin, KeyTestMixin class KeyAPITestCase(KeyTestMixin, KeyAPIViewTestMixin, BaseAPITestCase): @@ -44,14 +25,16 @@ 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_FINGERPRINT) + self.assertEqual( + response.data['fingerprint'], TEST_KEY_PRIVATE_FINGERPRINT + ) key = Key.objects.first() self.assertEqual(Key.objects.count(), 1) - self.assertEqual(key.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(key.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) def test_key_delete_view_no_access(self): - self._create_test_key() + self._create_test_key_private() response = self._request_test_key_delete_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) @@ -59,9 +42,9 @@ class KeyAPITestCase(KeyTestMixin, KeyAPIViewTestMixin, BaseAPITestCase): self.assertEqual(Key.objects.count(), 1) def test_key_delete_view_with_access(self): - self._create_test_key() + self._create_test_key_private() self.grant_access( - obj=self.test_key, permission=permission_key_delete + obj=self.test_key_private, permission=permission_key_delete ) response = self._request_test_key_delete_view() @@ -70,19 +53,19 @@ class KeyAPITestCase(KeyTestMixin, KeyAPIViewTestMixin, BaseAPITestCase): self.assertEqual(Key.objects.count(), 0) def test_key_detail_view_no_access(self): - self._create_test_key() + self._create_test_key_private() response = self._request_test_key_detail_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_key_detail_view_with_access(self): - self._create_test_key() + self._create_test_key_private() self.grant_access( - obj=self.test_key, permission=permission_key_view + obj=self.test_key_private, permission=permission_key_view ) response = self._request_test_key_detail_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( - response.data['fingerprint'], self.test_key.fingerprint + response.data['fingerprint'], self.test_key_private.fingerprint ) diff --git a/mayan/apps/django_gpg/tests/test_models.py b/mayan/apps/django_gpg/tests/test_models.py index 5b805e5468..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 ( @@ -17,40 +17,20 @@ from ..exceptions import ( from ..models import Key from .literals import ( - TEST_DETACHED_SIGNATURE, TEST_FILE, TEST_KEY_DATA, TEST_KEY_FINGERPRINT, - TEST_KEY_PASSPHRASE, TEST_RECEIVE_KEY, TEST_SEARCH_FINGERPRINT, - TEST_SEARCH_UID, TEST_SIGNED_FILE, TEST_SIGNED_FILE_CONTENT + MOCK_SEARCH_KEYS_RESPONSE, TEST_DETACHED_SIGNATURE, TEST_FILE, + TEST_KEY_PRIVATE_DATA, TEST_KEY_PRIVATE_FINGERPRINT, + TEST_KEY_PRIVATE_PASSPHRASE, TEST_SEARCH_FINGERPRINT, TEST_SEARCH_UID, + TEST_SIGNED_FILE, TEST_SIGNED_FILE_CONTENT ) - -MOCK_SEARCH_KEYS_RESPONSE = [ - { - 'algo': u'1', - 'date': u'1311475606', - 'expires': u'1643601600', - 'keyid': u'607138F1AECC5A5CA31CB7715F3F7F75D210724D', - 'length': u'2048', - 'type': u'pub', - 'uids': [u'Roberto Rosario '] - } -] - - -def mock_recv_keys(self, keyserver, *keyids): - class ImportResult(object): - count = 1 - fingerprints = [TEST_SEARCH_FINGERPRINT] - - self.import_keys(TEST_RECEIVE_KEY) - - return ImportResult() +from .mocks import mock_recv_keys class KeyTestCase(BaseTestCase): def test_key_instance_creation(self): # Creating a Key instance is analogous to importing a key - key = Key.objects.create(key_data=TEST_KEY_DATA) + key = Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) - self.assertEqual(key.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(key.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) @mock.patch.object(gnupg.GPG, 'search_keys', autospec=True) def test_key_search(self, search_keys): @@ -89,36 +69,36 @@ class KeyTestCase(BaseTestCase): with open(TEST_SIGNED_FILE, mode='rb') as signed_file: result = Key.objects.verify_file(signed_file) - self.assertTrue(result.key_id in TEST_KEY_FINGERPRINT) + self.assertTrue(result.key_id in TEST_KEY_PRIVATE_FINGERPRINT) def test_embedded_verification_with_key(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_SIGNED_FILE, mode='rb') as signed_file: result = Key.objects.verify_file(signed_file) - self.assertEqual(result.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(result.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) def test_embedded_verification_with_correct_fingerprint(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_SIGNED_FILE, mode='rb') as signed_file: result = Key.objects.verify_file( - signed_file, key_fingerprint=TEST_KEY_FINGERPRINT + signed_file, key_fingerprint=TEST_KEY_PRIVATE_FINGERPRINT ) self.assertTrue(result.valid) - self.assertEqual(result.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(result.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) def test_embedded_verification_with_incorrect_fingerprint(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_SIGNED_FILE, mode='rb') as signed_file: with self.assertRaises(KeyDoesNotExist): Key.objects.verify_file(signed_file, key_fingerprint='999') def test_signed_file_decryption(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_SIGNED_FILE, mode='rb') as signed_file: result = Key.objects.decrypt_file(file_object=signed_file) @@ -142,10 +122,10 @@ class KeyTestCase(BaseTestCase): file_object=test_file, signature_file=signature_file ) - self.assertTrue(result.key_id in TEST_KEY_FINGERPRINT) + self.assertTrue(result.key_id in TEST_KEY_PRIVATE_FINGERPRINT) def test_detached_verification_with_key(self): - Key.objects.create(key_data=TEST_KEY_DATA) + Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_DETACHED_SIGNATURE, mode='rb') as signature_file: with open(TEST_FILE, mode='rb') as test_file: @@ -154,10 +134,10 @@ class KeyTestCase(BaseTestCase): ) self.assertTrue(result) - self.assertEqual(result.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(result.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) def test_detached_signing_no_passphrase(self): - key = Key.objects.create(key_data=TEST_KEY_DATA) + key = Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with self.assertRaises(NeedPassphrase): with open(TEST_FILE, mode='rb') as test_file: @@ -166,7 +146,7 @@ class KeyTestCase(BaseTestCase): ) def test_detached_signing_bad_passphrase(self): - key = Key.objects.create(key_data=TEST_KEY_DATA) + key = Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with self.assertRaises(PassphraseError): with open(TEST_FILE, mode='rb') as test_file: @@ -176,12 +156,12 @@ class KeyTestCase(BaseTestCase): ) def test_detached_signing_with_passphrase(self): - key = Key.objects.create(key_data=TEST_KEY_DATA) + key = Key.objects.create(key_data=TEST_KEY_PRIVATE_DATA) with open(TEST_FILE, mode='rb') as test_file: detached_signature = key.sign_file( file_object=test_file, detached=True, - passphrase=TEST_KEY_PASSPHRASE + passphrase=TEST_KEY_PRIVATE_PASSPHRASE ) signature_file = io.BytesIO() @@ -195,4 +175,4 @@ class KeyTestCase(BaseTestCase): signature_file.close() self.assertTrue(result) - self.assertEqual(result.fingerprint, TEST_KEY_FINGERPRINT) + self.assertEqual(result.fingerprint, TEST_KEY_PRIVATE_FINGERPRINT) diff --git a/mayan/apps/django_gpg/tests/test_views.py b/mayan/apps/django_gpg/tests/test_views.py index 5bc46a0b70..128401f0fd 100644 --- a/mayan/apps/django_gpg/tests/test_views.py +++ b/mayan/apps/django_gpg/tests/test_views.py @@ -1,48 +1,34 @@ 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 -from .literals import TEST_KEY_DATA, TEST_KEY_FINGERPRINT -from .mixins import KeyTestMixin - - -class KeyViewTestMixin(object): - def _request_test_key_download_view(self): - return self.get( - viewname='django_gpg:key_download', kwargs={'pk': self.test_key.pk} - ) - - def _request_test_key_upload_view(self): - return self.post( - viewname='django_gpg:key_upload', data={'key_data': TEST_KEY_DATA} - ) +from .literals import TEST_KEY_PRIVATE_FINGERPRINT +from .mixins import KeyTestMixin, KeyViewTestMixin class KeyViewTestCase(KeyTestMixin, KeyViewTestMixin, GenericViewTestCase): def test_key_download_view_no_permission(self): - self._create_test_key() + self._create_test_key_private() response = self._request_test_key_download_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_key_download_view_with_permission(self): - self.expected_content_type = 'application/octet-stream; charset=utf-8' + self.expected_content_types = ('text/html; charset=utf-8',) - self._create_test_key() + self._create_test_key_private() self.grant_access( - obj=self.test_key, permission=permission_key_download + obj=self.test_key_private, permission=permission_key_download ) response = self._request_test_key_download_view() - assert_download_response( - self, response=response, content=self.test_key.key_data, - basename=self.test_key.key_id, + self.assert_download_response( + response=response, content=self.test_key_private.key_data, + filename=self.test_key_private.key_id, ) def test_key_upload_view_no_permission(self): @@ -59,5 +45,5 @@ class KeyViewTestCase(KeyTestMixin, KeyViewTestMixin, GenericViewTestCase): self.assertEqual(Key.objects.count(), 1) self.assertEqual( - Key.objects.first().fingerprint, TEST_KEY_FINGERPRINT + Key.objects.first().fingerprint, TEST_KEY_PRIVATE_FINGERPRINT ) 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/django_gpg/views.py b/mayan/apps/django_gpg/views.py index ea2c4c29fd..599c97fb24 100644 --- a/mayan/apps/django_gpg/views.py +++ b/mayan/apps/django_gpg/views.py @@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals import logging from django.contrib import messages -from django.core.files.base import ContentFile from django.template import RequestContext from django.urls import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ @@ -15,7 +14,10 @@ from mayan.apps.common.generics import ( ) from .forms import KeyDetailForm, KeySearchForm -from .icons import icon_key_setup, icon_keyserver_search +from .icons import ( + icon_key_setup, icon_keyserver_search, icon_private_keys, + icon_public_keys +) from .links import link_key_query, link_key_upload from .literals import KEY_TYPE_PUBLIC from .models import Key @@ -56,10 +58,11 @@ class KeyDownloadView(SingleObjectDownloadView): model = Key object_permission = permission_key_download - def get_file(self): - key = self.get_object() + def get_download_file_object(self): + return self.object.key_data - return ContentFile(key.key_data, name=key.key_id) + def get_download_filename(self): + return self.object.key_id class KeyReceive(ConfirmView): @@ -161,7 +164,7 @@ class PrivateKeyListView(SingleObjectListView): def get_extra_context(self): return { 'hide_object': True, - 'no_results_icon': icon_key_setup, + 'no_results_icon': icon_private_keys, 'no_results_main_link': link_key_upload.resolve( context=RequestContext(request=self.request) ), @@ -184,7 +187,7 @@ class PublicKeyListView(SingleObjectListView): def get_extra_context(self): return { 'hide_object': True, - 'no_results_icon': icon_key_setup, + 'no_results_icon': icon_public_keys, 'no_results_main_link': link_key_upload.resolve( context=RequestContext(request=self.request) ), 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 9fdceb9549..1c7fb5ec46 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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.mo b/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.mo index 94bb94136d..4c7b1c45ca 100644 Binary files a/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.mo differ 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 7a655931b8..17f10c23e6 100644 --- a/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/bg/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-05-17 05:50+0000\n" -"Last-Translator: Pavlin Koldamov \n" +"POT-Creation-Date: 2019-12-18 00:27-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +20,7 @@ msgstr "" #: apps.py:39 events.py:8 msgid "Document comments" -msgstr "" +msgstr "Коментари по документа" #: apps.py:84 apps.py:88 links.py:33 models.py:45 permissions.py:7 msgid "Comments" @@ -27,23 +28,23 @@ msgstr "Коментари" #: events.py:12 msgid "Document comment created" -msgstr "" +msgstr "Коментар към документа е създаден" #: events.py:15 msgid "Document comment deleted" -msgstr "" +msgstr "Коментарът към документа е изтрит" #: events.py:18 msgid "Document comment edited" -msgstr "" +msgstr "Коментарът към документа е редактиран" #: links.py:18 msgid "Add comment" -msgstr "" +msgstr "Добави коментар" #: links.py:24 msgid "Delete" -msgstr "" +msgstr "Изтрийте" #: links.py:29 msgid "Edit" @@ -51,7 +52,7 @@ msgstr "Редактиране" #: models.py:28 msgid "Document" -msgstr "" +msgstr "Документ" #: models.py:32 models.py:68 msgid "User" @@ -64,7 +65,7 @@ msgstr "Коментар" #: models.py:38 msgid "Date time submitted" -msgstr "" +msgstr "Дата и час на подаване" #: permissions.py:10 msgid "Create new comments" @@ -76,7 +77,7 @@ msgstr "Изтриване на коментари" #: permissions.py:16 msgid "Edit comments" -msgstr "" +msgstr "Редактиране на коментари" #: permissions.py:19 msgid "View comments" @@ -90,29 +91,29 @@ msgstr "Добавяне на коментар към документ: %s" #: views.py:70 #, python-format msgid "Delete comment: %s?" -msgstr "" +msgstr "Изтрийте коментар: %s?" #: views.py:92 #, python-format msgid "Details for comment: %s?" -msgstr "" +msgstr "Данни за коментар: %s?" #: views.py:110 #, python-format msgid "Edit comment: %s?" -msgstr "" +msgstr "Редактиране на коментар: %s?" #: views.py:135 msgid "" "Document comments are timestamped text entries from users. They are great " "for collaboration." -msgstr "" +msgstr "Коментарите към документа са текстови записи от потребителите. Те са идеални за сътрудничество." #: views.py:138 msgid "There are no comments" -msgstr "" +msgstr "Няма коментари" #: views.py:140 #, python-format msgid "Comments for document: %s" -msgstr "" +msgstr "Коментари към документ: %s" 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 2a887348b7..5b5e7a77d9 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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.mo b/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.mo index c5ddf9fd38..5989ee4573 100644 Binary files a/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.mo differ 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 addbdbb772..0ec3648eb9 100644 --- a/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_comments/locale/cs/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-05-17 05:50+0000\n" -"Last-Translator: Jiri Fait \n" +"POT-Creation-Date: 2019-12-18 00:27-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,27 +20,27 @@ msgstr "" #: apps.py:39 events.py:8 msgid "Document comments" -msgstr "" +msgstr "Komentáře k dokumentu" #: apps.py:84 apps.py:88 links.py:33 models.py:45 permissions.py:7 msgid "Comments" -msgstr "" +msgstr "Komentáře" #: events.py:12 msgid "Document comment created" -msgstr "" +msgstr "Komentář dokumentu byl vytvořen" #: events.py:15 msgid "Document comment deleted" -msgstr "" +msgstr "Komentář dokumentu byl smazán" #: events.py:18 msgid "Document comment edited" -msgstr "" +msgstr "Komentář dokumentu byl upraven" #: links.py:18 msgid "Add comment" -msgstr "" +msgstr "Přidat komentář" #: links.py:24 msgid "Delete" @@ -51,68 +52,68 @@ msgstr "Editovat" #: models.py:28 msgid "Document" -msgstr "" +msgstr "Dokument" #: models.py:32 models.py:68 msgid "User" -msgstr "" +msgstr "Uživatel" #. Translators: Comment here is a noun and refers to the actual text stored #: models.py:35 models.py:44 msgid "Comment" -msgstr "" +msgstr "Komentář" #: models.py:38 msgid "Date time submitted" -msgstr "" +msgstr "Datuma čas odeslání" #: permissions.py:10 msgid "Create new comments" -msgstr "" +msgstr "Vytvořit nové komentáře" #: permissions.py:13 msgid "Delete comments" -msgstr "" +msgstr "Smazat komentáře" #: permissions.py:16 msgid "Edit comments" -msgstr "" +msgstr "Upravit komentáře" #: permissions.py:19 msgid "View comments" -msgstr "" +msgstr "Zobrazit komentáře" #: views.py:33 #, python-format msgid "Add comment to document: %s" -msgstr "" +msgstr "Přidat komentář k dokumentu: %s" #: views.py:70 #, python-format msgid "Delete comment: %s?" -msgstr "" +msgstr "Smazat komentář: %s?" #: views.py:92 #, python-format msgid "Details for comment: %s?" -msgstr "" +msgstr "Podrobnosti pro komentář: %s?" #: views.py:110 #, python-format msgid "Edit comment: %s?" -msgstr "" +msgstr "Upravit komentář: %s?" #: views.py:135 msgid "" "Document comments are timestamped text entries from users. They are great " "for collaboration." -msgstr "" +msgstr "Komentáře k dokumentu jsou časově označené textové záznamy od uživatelů. Jsou skvělé pro spolupráci." #: views.py:138 msgid "There are no comments" -msgstr "" +msgstr "Nejsou žádné komentáře" #: views.py:140 #, python-format msgid "Comments for document: %s" -msgstr "" +msgstr "Komentáře k dokumentu: %s" 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 4561d093e0..e57e22eb2a 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 eecd294283..4d400f5ac1 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 9e88cfa4a7..7cd3b20da0 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 37a606a65d..0355dd6a0e 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 ff89265654..5255f9d737 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 e8641bab93..4b83b7e9ac 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 af57cfe0ca..44d81dd94b 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 15395328a9..0856d1eff6 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 fa5d235cbb..5083e2c0e1 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 9ce540012f..d7d84de4d9 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 9c7a5bae98..5043de351a 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 cda8ddf744..dbb9eb931e 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 e5b1cb117e..98ee0fa29b 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 f7196ecb4b..08dd526dcf 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 3a1744819d..bfe446352b 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 14a459a202..6900d73fe4 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 7eb8e8f0e0..e05c85a36d 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 8206971403..31d094eec2 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 39fdb686f4..3094aac2c0 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 8fe00468f9..aeab710fba 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 b7b893b817..a07a5214c4 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 c28f567daf..bf23b65705 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -32,16 +32,15 @@ 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_create, permission_document_indexing_delete, - permission_document_indexing_edit, + permission_document_indexing_delete, permission_document_indexing_edit, permission_document_indexing_instance_view, permission_document_indexing_rebuild, permission_document_indexing_view ) @@ -85,7 +84,6 @@ class DocumentIndexingApp(MayanAppConfig): ModelPermission.register( model=Index, permissions=( permission_acl_edit, permission_acl_view, - permission_document_indexing_create, permission_document_indexing_delete, permission_document_indexing_edit, permission_document_indexing_instance_view, @@ -101,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[ @@ -176,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,), @@ -211,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 b9863cc1d5..74b433e4ef 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +22,31 @@ 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 "" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "عدد الوثائق الكلي" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 0f0d95f896..713b559b7c 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 1f3c83ae60..7b54256646 100644 --- a/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/bg/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 # Pavlin Koldamov , 2012 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-09 09:16+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" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,190 +23,202 @@ 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 "" +msgstr "Типове документи" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" -msgstr "" +msgstr "Индексиране на документи" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" -msgstr "" +msgstr "Общо нива" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" -msgstr "" +msgstr "Общо документи" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" -msgstr "" +msgstr "Ниво" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" -msgstr "" +msgstr "Нива" -#: apps.py:157 apps.py:175 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Документи" #: events.py:12 msgid "Index created" -msgstr "" +msgstr "Създаден е индекс" #: events.py:15 msgid "Index edited" -msgstr "" +msgstr "Индексът е редактиран" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." -msgstr "" +msgstr "Шаблони за индексиране, които трябва да бъдат поставени на опашка за възстановяване." -#: forms.py:20 links.py:30 +#: forms.py:19 links.py:29 msgid "Index templates" -msgstr "" +msgstr "Шаблони за индексиране" + +#: forms.py:34 +msgid "Template" +msgstr "Шаблон" #: handlers.py:20 msgid "Creation date" -msgstr "" +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 +#: links.py:44 queues.py:24 +msgid "Rebuild index" +msgstr "Възстановяване на индекс" + +#: links.py:53 links.py:64 msgid "Deletes and creates from scratch all the document indexes." msgstr "Изтриване и създаване от нулата на всички индекси за документа." -#: links.py:50 views.py:445 +#: links.py:55 views.py:446 msgid "Rebuild indexes" -msgstr "" +msgstr "Възстановяване на индекси" -#: links.py:56 queues.py:24 -msgid "Rebuild index" -msgstr "" +#: links.py:66 views.py:481 +msgid "Reset indexes" +msgstr "Нулиране на индекси" -#: links.py:73 views.py:87 +#: links.py:83 views.py:87 msgid "Create index" -msgstr "" +msgstr "Създаване на индекс" -#: links.py:80 links.py:110 +#: links.py:90 links.py:120 msgid "Delete" -msgstr "" +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 "" +msgstr "Шаблон за дърво" -#: links.py:104 +#: links.py:114 msgid "New child node" -msgstr "" +msgstr "Нов възел дете" #: models.py:36 -msgid "Label" -msgstr "" +msgid "Short description of this index." +msgstr "Кратко описание на този индекс." -#: models.py:40 -msgid "This value will be used by other apps to reference this index." -msgstr "" +#: models.py:37 +msgid "Label" +msgstr "Етикет" #: models.py:41 -msgid "Slug" -msgstr "" +msgid "This value will be used by other apps to reference this index." +msgstr "Тази стойност ще бъде използвана от други приложения за препратка към този индекс." -#: models.py:46 +#: models.py:42 +msgid "Slug" +msgstr "Калъп" + +#: 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 "" +msgstr "Активиран" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" -msgstr "" +msgstr "Индекс" -#: models.py:191 +#: models.py:193 msgid "Index instance" -msgstr "index instance" +msgstr "Момент на индексиране" -#: models.py:192 +#: models.py:194 msgid "Index instances" -msgstr "" +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 "" +msgstr "Въведете шаблон за изобразяване. Използвайте езика за шаблони на Django по подразбиране (https://docs.djangoproject.com/en/1.11/ref/templates/builtins/)" -#: models.py:227 +#: models.py:229 msgid "Indexing expression" -msgstr "" +msgstr "Израз за индексиране " -#: models.py:232 +#: models.py:234 msgid "Causes this node to be visible and updated when document data changes." -msgstr "" +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 "" +msgstr "Поставете отметка в тази опция, за да може този възел да действа като контейнер за документи, а не като родител за други възли." -#: models.py:243 +#: models.py:245 msgid "Link documents" -msgstr "" +msgstr "Свържете документи" -#: models.py:247 +#: models.py:249 msgid "Index node template" -msgstr "" +msgstr "Шаблон за възел на индекс" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" -msgstr "" +msgstr "Шаблон за възел на индекси" -#: models.py:252 +#: models.py:254 msgid "Root" -msgstr "" +msgstr "Корен" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" -msgstr "" +msgstr "Грешка при индексиране на документ: %(document)s; израз: %(expression)s; %(exception)s" -#: models.py:351 +#: models.py:353 msgid "Index template node" -msgstr "" +msgstr "Възел на шаблона на индекс" -#: models.py:354 +#: models.py:356 msgid "Value" msgstr "Стойност" -#: models.py:364 +#: models.py:366 msgid "Index node instance" -msgstr "" +msgstr "Момент на възел за индекс" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" -msgstr "" +msgstr "Моменти на възли на индекси" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" -msgstr "" +msgstr "Момент на възел на индекс на документ" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" -msgstr "" +msgstr "Моменти на възли за индекси на документи" #: permissions.py:7 queues.py:9 msgid "Indexing" @@ -213,164 +226,179 @@ msgstr "Индексиране" #: permissions.py:10 msgid "Create new document indexes" -msgstr "" +msgstr "Създаване на нови индекси на документи" #: permissions.py:13 msgid "Edit document indexes" -msgstr "" +msgstr "Редактиране на индекси на документи" #: permissions.py:16 msgid "Delete document indexes" -msgstr "" +msgstr "Изтриване на индекси на документи" #: permissions.py:19 msgid "View document index instances" -msgstr "" +msgstr "Преглед на моменти на индексиране на документи" #: permissions.py:23 msgid "View document indexes" -msgstr "" +msgstr "Преглед на индекси на документи" #: permissions.py:26 msgid "Rebuild document indexes" -msgstr "" +msgstr "Възстановете индексите на документи" #: queues.py:12 msgid "Delete empty index nodes" -msgstr "" +msgstr "Изтрийте празните индексни възли" #: queues.py:16 msgid "Remove document" -msgstr "" +msgstr "Премахване на документ" #: queues.py:20 msgid "Index document" -msgstr "" +msgstr "Индексиране на документ" #: views.py:46 msgid "Available indexes" -msgstr "" +msgstr "Налични индекси" #: views.py:47 msgid "Indexes linked" -msgstr "" +msgstr "Свързани индекси" #: views.py:77 msgid "" "Documents of this type will appear in the indexes linked when these are " "updated. Events of the documents of this type will trigger updates in the " "linked indexes." -msgstr "" +msgstr "Документи от този тип ще се появят в свързаните индекси, когато те се актуализират. Събитията на документите от този тип ще задействат актуализации в свързаните индекси." #: views.py:81 #, python-format msgid "Indexes linked to document type: %s" -msgstr "" +msgstr "Индекси, свързани с типа документ: %s" #: views.py:109 #, python-format msgid "Delete the index: %s?" -msgstr "" +msgstr "Изтриване на индекса: %s?" #: views.py:124 #, python-format msgid "Edit index: %s" -msgstr "" +msgstr "Редактиране на индекс: %s" #: views.py:143 msgid "" "Indexes group document automatically into levels. Indexe are defined using " "template whose markers are replaced with direct properties of documents like" " label or description, or that of extended properties like metadata." -msgstr "" +msgstr "Индексите групират автоматично документите по нива. Индексите се дефинират с помощта на шаблон, чиито маркери са заменени с директни свойства на документа като етикет или описание или с разширени свойства като метаданни." #: views.py:148 msgid "There are no indexes." -msgstr "" +msgstr "Няма индекси." #: views.py:161 #, python-format msgid "Rebuild index: %s" -msgstr "" +msgstr "Възстановяване на индекс: %s" + +#: views.py:179 +msgid "Index queued for rebuild." +msgstr "Индексът е на опашка за възстановяване." #: views.py:191 msgid "Available document types" -msgstr "" +msgstr "Налични типове документи" #: views.py:192 msgid "Document types linked" -msgstr "" +msgstr "Свързани типове документи" #: views.py:202 msgid "" "Only the documents of the types selected will be shown in the index when " "built. Only the events of the documents of the types select will trigger " "updates in the index." -msgstr "" +msgstr "Само документите от избраните типове ще бъдат показани в индекса, когато последният се възстанови. Само събитията на документите от избраните типове ще задействат актуализации в индекса." #: views.py:206 #, python-format msgid "Document types linked to index: %s" -msgstr "" +msgstr "Типове документи, свързани с индекс: %s" #: views.py:218 #, python-format msgid "Tree template nodes for index: %s" -msgstr "" +msgstr "Възли на шаблона дърво за индекс: %s" #: views.py:248 #, python-format msgid "Create child node of: %s" -msgstr "" +msgstr "Създайте дъщерен възел на: %s" #: views.py:271 #, python-format msgid "Delete the index template node: %s?" -msgstr "" +msgstr "Изтрийте възела на шаблона на индекса: %s?" #: views.py:294 #, python-format msgid "Edit the index template node: %s?" -msgstr "" +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 "" +msgstr "Това може да означава, че не са създадени индексни шаблони или че има шаблони за индекс, но те не са дефинирани правилно." -#: views.py:321 +#: views.py:322 msgid "There are no index instances available." -msgstr "" +msgstr "Няма налични моменти на индексиране." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" -msgstr "" +msgstr "Навигация: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" -msgstr "" +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 "" +msgstr "Задайте типа на този документ в индекс, за да се появи в моменти на организационните единици на тези индекси." -#: views.py:429 +#: views.py:430 msgid "This document is not in any index" -msgstr "" +msgstr "Този документ не е в нито един индекс" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" -msgstr "" +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] "" +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 f0edc65c76..90a77cd1d6 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +23,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Indeksiranje dokumenata" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Ukupni nivoi" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Ukupni dokumenti" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Nivo" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Nivoa" -#: apps.py:157 apps.py:175 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 7ab4d6f249..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 3a40dc9e4c..611dafd2c7 100644 --- a/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_indexing/locale/cs/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -19,359 +20,388 @@ msgstr "" #: admin.py:24 msgid "None" -msgstr "" +msgstr "žádný" -#: admin.py:26 links.py:85 models.py:52 +#: admin.py:26 links.py:95 models.py:54 msgid "Document types" -msgstr "" +msgstr "Typy dokumentů" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" -msgstr "" +msgstr "Indexování dokumentů" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" -msgstr "" +msgstr "Celkem úrovní" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" -msgstr "" +msgstr "Celkem dokumentů" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" -msgstr "" +msgstr "Úroveň" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" -msgstr "" +msgstr "Úrovně" -#: apps.py:157 apps.py:175 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Dokumenty" #: events.py:12 msgid "Index created" -msgstr "" +msgstr "Rejstřík vytvořen" #: events.py:15 msgid "Index edited" -msgstr "" +msgstr "Rejstřík upraven" -#: forms.py:19 +#: forms.py:18 msgid "Index templates to be queued for rebuilding." -msgstr "" +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 "" +msgstr "Šablony rejstříků" + +#: forms.py:34 +msgid "Template" +msgstr "Šablona" #: handlers.py:20 msgid "Creation date" -msgstr "" +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 "" +msgstr "Rejstříky" -#: 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 "Znovu sestavit rejstřík" + +#: 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:73 views.py:87 +#: links.py:83 views.py:87 msgid "Create index" -msgstr "" +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 "" +msgstr "Šablona stromu" -#: links.py:104 +#: links.py:114 msgid "New child node" -msgstr "" +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 -msgid "This value will be used by other apps to reference this index." -msgstr "" - #: models.py:41 -msgid "Slug" -msgstr "" +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:46 +#: models.py:42 +msgid "Slug" +msgstr "Slug" + +#: models.py:47 msgid "" "Causes this index to be visible and updated when document data changes." -msgstr "" +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 "" +msgstr "Povoleno" -#: models.py:59 models.py:219 +#: models.py:61 models.py:221 msgid "Index" -msgstr "" +msgstr "Rejstřík" -#: models.py:191 +#: models.py:193 msgid "Index instance" -msgstr "" +msgstr "Instance rejstříku" -#: models.py:192 +#: models.py:194 msgid "Index instances" -msgstr "" +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 "" +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 "" +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 "" +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 "" +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 "" +msgstr "Šablona uzlu rejstříku" -#: models.py:248 +#: models.py:250 msgid "Indexes node template" -msgstr "" +msgstr "Šablona uzlů rejstříků" -#: models.py:252 +#: models.py:254 msgid "Root" -msgstr "" +msgstr "Kořen" -#: models.py:308 +#: models.py:310 #, python-format msgid "" "Error indexing document: %(document)s; expression: %(expression)s; " "%(exception)s" -msgstr "" +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 "" +msgstr "Uzel šablony rejstříku" -#: models.py:354 +#: models.py:356 msgid "Value" -msgstr "" +msgstr "Hodnota" -#: models.py:364 +#: models.py:366 msgid "Index node instance" -msgstr "" +msgstr "Instance rejstříkového uzlu" -#: models.py:365 +#: models.py:367 msgid "Indexes node instances" -msgstr "" +msgstr "Instance uzlů rejstříků" -#: models.py:479 +#: models.py:481 msgid "Document index node instance" -msgstr "" +msgstr "Instance uzlu rejstříku dokumentů" -#: models.py:480 +#: models.py:482 msgid "Document indexes node instances" -msgstr "" +msgstr "Instance uzlů rejstříků dokumentů" #: permissions.py:7 queues.py:9 msgid "Indexing" -msgstr "" +msgstr "Indexování" #: permissions.py:10 msgid "Create new document indexes" -msgstr "" +msgstr "Vytvoř nové rejstříky dokumentů" #: permissions.py:13 msgid "Edit document indexes" -msgstr "" +msgstr "Uprav rejstřík dokumentů" #: permissions.py:16 msgid "Delete document indexes" -msgstr "" +msgstr "Smaž rejstříky doomentů" #: permissions.py:19 msgid "View document index instances" -msgstr "" +msgstr "Zobrazit instance rejstříku dokumentů" #: permissions.py:23 msgid "View document indexes" -msgstr "" +msgstr "Zobrazení rejstříků dokumentů" #: permissions.py:26 msgid "Rebuild document indexes" -msgstr "" +msgstr "Znovu sestavit rejstříky dokumentů" #: queues.py:12 msgid "Delete empty index nodes" -msgstr "" +msgstr "Odstranit prázdné rejstříkové uzly" #: queues.py:16 msgid "Remove document" -msgstr "" +msgstr "Odebrat dokument" #: queues.py:20 msgid "Index document" -msgstr "" +msgstr "Rejstřík dokumentu" #: views.py:46 msgid "Available indexes" -msgstr "" +msgstr "Dostupné rejstříky" #: views.py:47 msgid "Indexes linked" -msgstr "" +msgstr "Propojené rejstříky" #: views.py:77 msgid "" "Documents of this type will appear in the indexes linked when these are " "updated. Events of the documents of this type will trigger updates in the " "linked indexes." -msgstr "" +msgstr "Dokumenty tohoto typu se objeví v rejstřících propojených při jejich aktualizaci. Události dokumentů tohoto typu vyvolají aktualizace v propojených rejstřících." #: views.py:81 #, python-format msgid "Indexes linked to document type: %s" -msgstr "" +msgstr "Rejstříky spojené s typem dokumentu: %s" #: views.py:109 #, python-format msgid "Delete the index: %s?" -msgstr "" +msgstr "Smazat rejstřík: %s" #: views.py:124 #, python-format msgid "Edit index: %s" -msgstr "" +msgstr "Upravit rejstřík %s" #: views.py:143 msgid "" "Indexes group document automatically into levels. Indexe are defined using " "template whose markers are replaced with direct properties of documents like" " label or description, or that of extended properties like metadata." -msgstr "" +msgstr "Zařadí do rejstříku skupinu dokumentů automaticky do úrovní. Rejstříky jsou definovány pomocí šablony, jejíž značky jsou nahrazeny přímými vlastnostmi dokumentů, jako je popisek nebo popis, nebo rozšířených vlastností, jako jsou metadata." #: views.py:148 msgid "There are no indexes." -msgstr "" +msgstr "Žádné rejstříky." #: views.py:161 #, python-format 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 "" +msgstr "Dostupné typy dokumentů" #: views.py:192 msgid "Document types linked" -msgstr "" +msgstr "Propojené typy dokumentů" #: views.py:202 msgid "" "Only the documents of the types selected will be shown in the index when " "built. Only the events of the documents of the types select will trigger " "updates in the index." -msgstr "" +msgstr "Po vytvoření budou v rejstříku zobrazeny pouze dokumenty vybraných typů. Aktualizace v rejstříku vyvolají pouze události dokumentů vybraných typů." #: views.py:206 #, python-format msgid "Document types linked to index: %s" -msgstr "" +msgstr "Typy dokumentů spojené s rejstříkem: %s" #: views.py:218 #, python-format msgid "Tree template nodes for index: %s" -msgstr "" +msgstr "Uzly stromové šablony pro rejstřík: %s" #: views.py:248 #, python-format msgid "Create child node of: %s" -msgstr "" +msgstr "Vytvořit podřízený uzel: %s" #: views.py:271 #, python-format msgid "Delete the index template node: %s?" -msgstr "" +msgstr "Odstranit uzel šablony rejstříku: %s?" #: views.py:294 #, python-format msgid "Edit the index template node: %s?" -msgstr "" +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 "" +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 "" +msgstr "Nejsou k dispozici žádné instance rejstříků." -#: views.py:366 +#: views.py:367 #, python-format msgid "Navigation: %s" -msgstr "" +msgstr "Navigace: %s" -#: views.py:371 +#: views.py:372 #, python-format msgid "Contents for index: %s" -msgstr "" +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 "" +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 "" +msgstr "Tento dokument není v žádném rejstříku" -#: views.py:433 +#: views.py:434 #, python-format msgid "Indexes nodes containing document: %s" -msgstr "" +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." +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 46f8ea19d2..581766e097 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +21,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Antal dokumenter" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 3564e5c22f..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 c36f2d32ab..c3465db8ba 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 @@ -4,6 +4,7 @@ # # Translators: # Berny , 2015-2016 +# Marvin Haschker , 2019 # Mathias Behrle , 2019 # Mathias Behrle , 2014 # Robin Schubert , 2019 @@ -14,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -28,31 +29,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Dokumentenindizierung" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Gesamtanzahl Ebenen" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Alle Dokumente" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Ebene" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Ebenen" -#: apps.py:157 apps.py:175 models.py:358 +#: apps.py:162 apps.py:180 models.py:360 msgid "Documents" msgstr "Index bearbeitet" @@ -64,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" @@ -297,6 +310,10 @@ msgstr "Keine Indizes vorhanden." #: views.py:161 #, python-format msgid "Rebuild index: %s" +msgstr "Indices wiederaufbauen: %s" + +#: views.py:179 +msgid "Index queued for rebuild." msgstr "" #: views.py:191 @@ -339,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 8d687c75e9..a8295319ce 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +21,31 @@ 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 "Τύποι εγγράφων" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Ευρετήρια εγγράφων" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Σύνολο επιπέδων" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Σύνολο εγγράφων" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Επίπεδο" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Επίπεδα" -#: apps.py:157 apps.py:175 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 2f54bd1a2c..3a66c5b98c 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-09-24 23:09-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,31 +21,31 @@ 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 "" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 f22a7f2973..7f7ef53674 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-09-24 21:05+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +24,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Indexación de documentos" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Niveles totales" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Total de documentos" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Nível" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Niveles" -#: apps.py:157 apps.py:175 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 729b489df3..901d48eb5a 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +22,31 @@ 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 "نوع سند" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "نمایه سازی سند" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "سطوح کل" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "کل اسناد" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "سطح" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "سطوح" -#: apps.py:157 apps.py:175 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 bf73581695..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 b79e976f46..ffab8473f8 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +28,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Indexation de document" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Nombre de niveaux" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Nombre total de documents" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Niveau" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Niveaux" -#: apps.py:157 apps.py:175 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" @@ -296,7 +309,11 @@ msgstr "Il n'y a pas d'index." #: views.py:161 #, python-format msgid "Rebuild index: %s" -msgstr "" +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" @@ -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 3a45a9c4ab..823eb61fc4 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +22,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Dokumentum indexelés" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Dokumentumok száma" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 cec8930a23..a24cd118ae 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +21,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Total dokumen" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 0f6537412d..79e9a2e089 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-28 11:43+0000\n" -"Last-Translator: Daniele Bortoluzzi \n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +26,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Indicizzazione documento" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Livelli totali" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Totale documenti" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Livello" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Livelli" -#: apps.py:157 apps.py:175 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 39d6b35dfd..85d67402b1 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +22,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Dokumentu indeksēšana" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Kopējais līmenis" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Kopā dokumenti" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Līmenis" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Līmeņi" -#: apps.py:157 apps.py:175 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 76a70357c1..bc581bc6a3 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +24,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Documentindexering" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Niveau" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 d42a372428..808452a744 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +24,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Indeksowanie dokumentu" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Razem poziomy" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Razem dokumenty" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Poziom" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Poziomy" -#: apps.py:157 apps.py:175 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 ec1a1cf8b1..8a6d6568ad 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +23,31 @@ 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 "" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 0b23d80c59..603003d0c9 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +25,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Indexação de documentos" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Total de níveis" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Total de documentos" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Nível" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Níveis" -#: apps.py:157 apps.py:175 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 07b893ab69..f91d9ad042 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-09-03 08:35+0000\n" -"Last-Translator: Harald Ersch\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +23,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Indexarea documentelor" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "Total niveluri" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "Total documente" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Nivel" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "Niveluri" -#: apps.py:157 apps.py:175 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 69b9d90e37..2e7d376fd5 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +22,31 @@ 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 "Типы документов" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Индексирование документа" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Уровень" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 caaa167385..4b73fd898b 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +21,31 @@ 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 "" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 1b070ad2e6..5c1eec99cf 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +23,31 @@ 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" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "Belge dizini oluşturma" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "Seviye" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 923821dd05..5e8fad5e7c 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +21,31 @@ 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 "" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "" -#: apps.py:157 apps.py:175 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 d537c00077..881b10e600 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-09-24 23:09-0400\n" -"PO-Revision-Date: 2019-08-26 01:02+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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,31 +22,31 @@ 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 "文件类型" -#: apps.py:56 events.py:8 +#: apps.py:55 events.py:8 msgid "Document indexing" msgstr "文档索引" -#: apps.py:119 +#: apps.py:124 msgid "Total levels" msgstr "总级别" -#: apps.py:127 +#: apps.py:132 msgid "Total documents" msgstr "文档总数" -#: apps.py:132 apps.py:144 apps.py:163 +#: apps.py:137 apps.py:149 apps.py:168 msgid "Level" msgstr "级别" -#: apps.py:149 apps.py:168 +#: apps.py:154 apps.py:173 msgid "Levels" msgstr "级别" -#: apps.py:157 apps.py:175 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 f481252e8b..9bfe42fd2c 100644 --- a/mayan/apps/document_parsing/apps.py +++ b/mayan/apps/document_parsing/apps.py @@ -17,7 +17,6 @@ from mayan.apps.documents.signals import post_version_upload from mayan.apps.events.classes import ModelEventType from mayan.apps.navigation.classes import SourceColumn -from .dependencies import * # NOQA from .events import ( event_parsing_document_content_deleted, event_parsing_document_version_submit, @@ -101,7 +100,7 @@ class DocumentParsingApp(MayanAppConfig): ) ModelField( - model=Document, name='versions__pages__content__content' + model=Document, name='versions__version_pages__content__content' ) ModelPermission.register( @@ -133,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 30690c90c4..a52c7ca495 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -22,15 +22,15 @@ 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:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "" -#: apps.py:136 apps.py:140 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:222 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,35 +184,35 @@ 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" msgstr[2] "" @@ -220,21 +220,21 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.mo b/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.mo index d1134d8306..ee3d872ce3 100644 Binary files a/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.mo differ 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 ccc9dc3780..4ad0f20130 100644 --- a/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/bg/LC_MESSAGES/django.po @@ -4,16 +4,17 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Iliya Georgiev , 2018 +# Iliya Georgiev , 2017 +# Lyudmil Antonov , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" -"Last-Translator: Iliya Georgiev , 2018\n" +"Last-Translator: Lyudmil Antonov , 2019\n" "Language-Team: Bulgarian (https://www.transifex.com/rosarior/teams/13584/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,15 +22,15 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" -msgstr "" +msgstr "Разбор на документи" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" -msgstr "" +msgstr "Резултат" -#: apps.py:136 apps.py:140 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 "Съдържание" @@ -37,193 +38,201 @@ msgstr "Съдържание" msgid "" "Utility from the poppler-utils package used to text content from PDF files." msgstr "" +"Помощна програма от пакета poppler-utils, използвана за текстово съдържание " +"от PDF файлове." #: events.py:12 msgid "Document parsed content deleted" -msgstr "" +msgstr "Съдържанието на анализиран документ е изтрито" #: events.py:16 msgid "Document version submitted for parsing" -msgstr "" +msgstr "Версия на документа, изпратена за анализ" #: events.py:19 msgid "Document version parsing finished" -msgstr "" +msgstr "Анализът на версията на документа е завършен" #: forms.py:39 #, python-format msgid "Page %(page_number)d" -msgstr "" +msgstr "Страница %(page_number)d" #: forms.py:47 forms.py:59 msgid "Contents" msgstr "Съдържание" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" -msgstr "" +msgstr "Изтрийте анализираното съдържание" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:222 msgid "Parsing errors" -msgstr "" +msgstr "Грешки при анализ" -#: links.py:45 +#: links.py:50 msgid "Download content" -msgstr "" +msgstr "Изтеглете съдържание" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" -msgstr "" +msgstr "Изпратете за анализ" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" -msgstr "" +msgstr "Настройка на анализа" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" -msgstr "" +msgstr "Анализиране на документи по тип" #: models.py:21 msgid "Document page" -msgstr "" +msgstr "Страница на документа" #: models.py:25 msgid "The actual text content as extracted by the document parsing backend." msgstr "" +"Действителното текстово съдържание, извлечено от бекенда за анализ на " +"документа." #: models.py:33 msgid "Document page content" -msgstr "" +msgstr "Съдържание на страница на документ" #: models.py:34 msgid "Document pages contents" -msgstr "" +msgstr "Съдържание на страници на документ" #: models.py:46 msgid "Document type" -msgstr "Вид на документа" +msgstr "Тип документ" #: models.py:50 msgid "Automatically queue newly created documents for parsing." -msgstr "" +msgstr "Автоматично поставяне на новосъздадени документи на опашка за анализ." #: models.py:61 msgid "Document type settings" -msgstr "" +msgstr "Настройки за тип на документ" #: models.py:62 msgid "Document types settings" -msgstr "" +msgstr "Настройки за типове документи" #: models.py:73 msgid "Document version" -msgstr "" +msgstr "Версия на документа" #: models.py:76 msgid "Date time submitted" -msgstr "" +msgstr "Дата и час на подаване" #: models.py:82 msgid "Document version parse error" -msgstr "" +msgstr "Грешка при анализ на версията на документа" #: models.py:83 msgid "Document version parse errors" -msgstr "" +msgstr "Грешки при анализ на версията на документа" #: parsers.py:91 #, python-format msgid "Exception parsing page; %s" -msgstr "" +msgstr "Изключение при анализа на страница; %s" #: parsers.py:117 #, python-format msgid "Cannot find pdftotext executable at: %s" -msgstr "" +msgstr "Не може да се намери pdftotext изпълним файл: %s" #: permissions.py:12 msgid "View the content of a document" -msgstr "" +msgstr "Преглед на съдържанието на документ" #: permissions.py:15 msgid "Change document type parsing settings" -msgstr "" +msgstr "Промяна на настройките за анализ на типа документ" #: permissions.py:19 msgid "Parse the content of a document" -msgstr "" +msgstr "Анализ на съдържанието на документ" #: queues.py:8 msgid "Parsing" -msgstr "" +msgstr "Анализиране" #: queues.py:11 msgid "Document version parsing" -msgstr "" +msgstr "Анализ на версия на документ" #: settings.py:12 msgid "Set new document types to perform parsing automatically by default." msgstr "" +"Задайте нови типове документи за автоматично изпълнение на анализа по " +"подразбиране." #: settings.py:19 msgid "" "File path to poppler's pdftotext program used to extract text from PDF " "files." 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] "" +msgstr[0] "Да се изтрие ли анализираното съдържание на избрания документ?" +msgstr[1] "Да се изтрие ли анализираното съдържание на избраните документи?" -#: views.py:71 +#: views.py:70 #, python-format msgid "Content for document: %s" -msgstr "" +msgstr "Съдържание за документ: %s" -#: views.py:106 +#: views.py:103 #, python-format msgid "Content for document page: %s" -msgstr "" +msgstr "Съдържание за страница на документ: %s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" -msgstr "" +msgstr "Грешки в анализа на документ: %s" + +#: views.py:130 +#, python-format +msgid "%(count)d document added to the parsing queue" +msgstr "%(count)d документ е добавен към опашката за анализ" #: views.py:133 #, python-format -msgid "%(count)d document added to the parsing queue" -msgstr "" - -#: views.py:136 -#, python-format msgid "%(count)d documents added to the parsing queue" -msgstr "" +msgstr "%(count)d документи са добавени към опашката за анализ" -#: views.py:144 +#: views.py:141 #, 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] "" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "Да изпратите %(count)d документ на опашката за разбор?" +msgstr[1] "Да изпратите ли %(count)d документ(и) на опашката за анализ?" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" -msgstr "" +msgstr "Изпратете документ "%s" на опашката за анализ" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." -msgstr "" +msgstr "Редактиране на настройките за анализ на типа документ: %s." -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Изпратете всички документи от даден тип за анализ" -#: views.py:213 +#: views.py:210 #, python-format msgid "%(count)d documents added to the parsing queue." -msgstr "" +msgstr "%(count)d документи са добавени към опашката за анализ." diff --git a/mayan/apps/document_parsing/locale/bs_BA/LC_MESSAGES/django.mo b/mayan/apps/document_parsing/locale/bs_BA/LC_MESSAGES/django.mo index d38355dc73..05ce02e864 100644 Binary files a/mayan/apps/document_parsing/locale/bs_BA/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/bs_BA/LC_MESSAGES/django.mo differ 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 8f9e0f9d7c..fbc412b515 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 @@ -6,16 +6,16 @@ # Translators: # Roberto Rosario, 2017 # www.ping.ba , 2018 -# Atdhe Tabaku , 2018 +# Atdhe Tabaku , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" -"Last-Translator: Atdhe Tabaku , 2018\n" +"Last-Translator: Atdhe Tabaku , 2019\n" "Language-Team: Bosnian (Bosnia and Herzegovina) (https://www.transifex.com/rosarior/teams/13584/bs_BA/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,15 +23,15 @@ 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:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Gramatička analiza dokumenta" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Rezultat" -#: apps.py:136 apps.py:140 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:222 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,61 +176,61 @@ 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Greške analize u dokumentu: %s" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)ddokument dodan u red liste " -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d dokumente dodati u red liste" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" -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" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Pošaljite dokument \"%s\" u red liste" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Pošaljite sve dokumente za analizu" -#: views.py:213 +#: views.py:210 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.mo b/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.mo index 53316c7a99..3a8807d18b 100644 Binary files a/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.mo differ 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 c8d2d86260..53949601db 100644 --- a/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/cs/LC_MESSAGES/django.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # +# Translators: +# Michal Švábík , 2019 +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,213 +21,219 @@ 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:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" -msgstr "" +msgstr "Analýza dokumentů" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" -msgstr "" +msgstr "Výsledek" -#: apps.py:136 apps.py:140 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 "" +msgstr "Obsah" #: dependencies.py:11 msgid "" "Utility from the poppler-utils package used to text content from PDF files." msgstr "" +"Obslužný program z balíčku poppler-utils používaný k textovému obsahu ze " +"souborů PDF." #: events.py:12 msgid "Document parsed content deleted" -msgstr "" +msgstr "Analyzovaný obsah v dokumentu byl odstraněn" #: events.py:16 msgid "Document version submitted for parsing" -msgstr "" +msgstr "Verze dokumentu byla odeslána k analýze" #: events.py:19 msgid "Document version parsing finished" -msgstr "" +msgstr "Analýza verze dokumentu byla dokončena" #: forms.py:39 #, python-format msgid "Page %(page_number)d" -msgstr "" +msgstr "Strana %(page_number)d" #: forms.py:47 forms.py:59 msgid "Contents" -msgstr "" +msgstr "Obsah" -#: links.py:22 links.py:27 +#: links.py:27 links.py:32 msgid "Delete parsed content" -msgstr "" +msgstr "Smazat analyzovaný obsah" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:222 msgid "Parsing errors" -msgstr "" +msgstr "Chyby analýzy" -#: links.py:45 +#: links.py:50 msgid "Download content" -msgstr "" +msgstr "Stáhněte si obsah" -#: links.py:50 links.py:57 +#: links.py:55 links.py:62 msgid "Submit for parsing" -msgstr "" +msgstr "Odeslat k analýze" -#: links.py:63 +#: links.py:68 msgid "Setup parsing" -msgstr "" +msgstr "Nastavení analýzy" -#: links.py:72 +#: links.py:77 msgid "Parse documents per type" -msgstr "" +msgstr "Analyzujte dokumenty podle typu" #: models.py:21 msgid "Document page" -msgstr "" +msgstr "Strana dokumentu" #: models.py:25 msgid "The actual text content as extracted by the document parsing backend." -msgstr "" +msgstr "Skutečný textový obsah extrahovaný backendem analýzy dokumentu." #: models.py:33 msgid "Document page content" -msgstr "" +msgstr "Obsah stránky dokumentu" #: models.py:34 msgid "Document pages contents" -msgstr "" +msgstr "Obsah stránek dokumentu" #: models.py:46 msgid "Document type" -msgstr "" +msgstr "Typ dokumentu" #: models.py:50 msgid "Automatically queue newly created documents for parsing." -msgstr "" +msgstr "Automaticky zařazuje nově vytvořené dokumenty do fronty pro analýzu." #: models.py:61 msgid "Document type settings" -msgstr "" +msgstr "Nastavení typu dokumentu" #: models.py:62 msgid "Document types settings" -msgstr "" +msgstr "Nastavení typů dokumentů" #: models.py:73 msgid "Document version" -msgstr "" +msgstr "Verze dokumentu" #: models.py:76 msgid "Date time submitted" -msgstr "" +msgstr "Datuma čas odeslání" #: models.py:82 msgid "Document version parse error" -msgstr "" +msgstr "Chyba analýzy verze dokumentu" #: models.py:83 msgid "Document version parse errors" -msgstr "" +msgstr "Chyby analýzy verze dokumentu" #: parsers.py:91 #, python-format msgid "Exception parsing page; %s" -msgstr "" +msgstr "Nastala vyjímka analýzy strany; %s" #: parsers.py:117 #, python-format msgid "Cannot find pdftotext executable at: %s" -msgstr "" +msgstr "Nelze najít pdftotext spustitelný na: %s" #: permissions.py:12 msgid "View the content of a document" -msgstr "" +msgstr "Zobrazení obsahu dokumentu" #: permissions.py:15 msgid "Change document type parsing settings" -msgstr "" +msgstr "Změňte nastavení analýzy typu dokumentu" #: permissions.py:19 msgid "Parse the content of a document" -msgstr "" +msgstr "Analyzujte obsah dokumentu" #: queues.py:8 msgid "Parsing" -msgstr "" +msgstr "Analýza" #: queues.py:11 msgid "Document version parsing" -msgstr "" +msgstr "Analýza verze dokumentu" #: settings.py:12 msgid "Set new document types to perform parsing automatically by default." msgstr "" +"Nastavte nové typy dokumentů tak, aby ve výchozím nastavení prováděly " +"automatické analýzy." #: settings.py:19 msgid "" "File path to poppler's pdftotext program used to extract text from PDF " "files." 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] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Odstranit analyzovaný obsah vybraného dokumentu?" +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 "" +msgstr "Obsah dokumentu: %s" -#: views.py:106 +#: views.py:103 #, python-format msgid "Content for document page: %s" -msgstr "" +msgstr "Obsah stránky dokumentu: %s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" -msgstr "" +msgstr "Chyby analýzy dokumentu: %s" + +#: views.py:130 +#, 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:133 #, python-format -msgid "%(count)d document added to the parsing queue" -msgstr "" - -#: views.py:136 -#, python-format msgid "%(count)d documents added to the parsing queue" -msgstr "" +msgstr "%(count)d dokumenty přidané do fronty pro analýzu" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" -msgstr "" +msgstr "Zašlete dokument "%s" do fronty pro analýzu" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." +msgstr "Upravit nastavení analýzy typu dokumentu: %s." + +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" - -#: views.py:213 +#: views.py:210 #, python-format msgid "%(count)d documents added to the parsing queue." -msgstr "" +msgstr "%(count)d dokumenty přidané do fronty pro analýzu." diff --git a/mayan/apps/document_parsing/locale/da_DK/LC_MESSAGES/django.mo b/mayan/apps/document_parsing/locale/da_DK/LC_MESSAGES/django.mo index 3512b50565..619872051d 100644 Binary files a/mayan/apps/document_parsing/locale/da_DK/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/da_DK/LC_MESSAGES/django.mo differ 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 f8460efdcf..b84125148d 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 @@ -4,16 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Rasmus Kierudsen , 2018 +# Rasmus Kierudsen , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" -"Last-Translator: Rasmus Kierudsen , 2018\n" +"Last-Translator: Rasmus Kierudsen , 2019\n" "Language-Team: Danish (Denmark) (https://www.transifex.com/rosarior/teams/13584/da_DK/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,15 +21,15 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Resultat" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Gennemgår dokument: %s for fejl" -#: views.py:133 +#: views.py:130 #, 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:133 #, 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:141 #, 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" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" -#: views.py:157 +#: views.py:154 #, 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:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Klargør alle dokumenter af en type til gennemgang" -#: views.py:213 +#: views.py:210 #, 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.mo b/mayan/apps/document_parsing/locale/de_DE/LC_MESSAGES/django.mo index 01c316ecb5..faf55e2b3a 100644 Binary files a/mayan/apps/document_parsing/locale/de_DE/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/de_DE/LC_MESSAGES/django.mo differ 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 39f46cce2e..79771cb095 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 @@ -7,6 +7,7 @@ # Roberto Rosario, 2017 # Berny , 2018 # Robin Schubert , 2019 +# Marvin Haschker , 2019 # Mathias Behrle , 2019 # #, fuzzy @@ -14,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" "Last-Translator: Mathias Behrle , 2019\n" "Language-Team: German (Germany) (https://www.transifex.com/rosarior/teams/13584/de_DE/)\n" @@ -24,15 +25,15 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Dokument parsen" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Ergebnis" -#: apps.py:136 apps.py:140 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" @@ -45,7 +46,7 @@ msgstr "" #: events.py:12 msgid "Document parsed content deleted" -msgstr "" +msgstr "OCR-Inhalt des Dokumentes gelöscht" #: events.py:16 msgid "Document version submitted for parsing" @@ -64,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 "" +msgstr "OCR-Inhalt löschen" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:222 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" @@ -180,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] "" -msgstr[1] "" +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:103 #, python-format msgid "Content for document page: %s" msgstr "Inhalt von Dokument Seite: %s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Parsing Fehler für Dokument: %s" -#: views.py:133 +#: views.py:130 #, 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:133 #, 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:141 #, 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" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Dokument \"%s\" in die Parsing-Warteschlange einreihen" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Parsereinstellungen für Dokumententyp %s bearbeiten." -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "Alle Dokumente eines Typs zum Parsen einreichen." +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Alle Dokumente eines Typs zum Parsen einreichen" -#: views.py:213 +#: views.py:210 #, 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.mo b/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.mo index 8b5495d3bc..f51461b4b7 100644 Binary files a/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.mo differ 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 f14cd3568b..442eaed6a9 100644 --- a/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/el/LC_MESSAGES/django.po @@ -4,17 +4,16 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Hmayag Antonian , 2018 -# Roberto Rosario, 2019 +# Hmayag Antonian , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" -"Last-Translator: Roberto Rosario, 2019\n" +"Last-Translator: Hmayag Antonian , 2019\n" "Language-Team: Greek (https://www.transifex.com/rosarior/teams/13584/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,15 +21,15 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Ανάλυση εγγράφου" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Αποτέλεσμα" -#: apps.py:136 apps.py:140 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 +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:222 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 +172,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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Σφάλματα ανάλυσης του εγγράφου: %s" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d έγγραφο προστέθηκε στην λίστα προς ανάλυση" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d έγγραφα προστέθηκαν στην λίστα προς ανάλυση" -#: views.py:144 +#: views.py:141 #, 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 εγγράφων στην λίστα προς ανάλυση;" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Υποβολή εγγράφου \"%s\" στην λίστα προς ανάλυση" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Υποβολή όλων των εγγράφων ενός τύπου προς ανάλυση" -#: views.py:213 +#: views.py:210 #, 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 b40f32182c..0e5f54f1d7 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,15 +18,15 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/es/LC_MESSAGES/django.mo b/mayan/apps/document_parsing/locale/es/LC_MESSAGES/django.mo index 4979b20339..692e091a7f 100644 Binary files a/mayan/apps/document_parsing/locale/es/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/es/LC_MESSAGES/django.mo differ 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 3c12b8d1ad..e7b5b5f0f2 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -21,15 +21,15 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Análisis de documentos" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Resultado" -#: apps.py:136 apps.py:140 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" @@ -42,7 +42,7 @@ msgstr "" #: events.py:12 msgid "Document parsed content deleted" -msgstr "" +msgstr "Contenido analizado del documento eliminado" #: events.py:16 msgid "Document version submitted for parsing" @@ -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 "" +msgstr "Eliminar contenido analizado" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:222 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] "" -msgstr[1] "" +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:103 #, python-format msgid "Content for document page: %s" msgstr "Contenido de la página del documento: %s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Errores de análisis del documento: %s" -#: views.py:133 +#: views.py:130 #, 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:133 #, 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:141 #, 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" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "¿Enviar el documento %(count)d a la cola de análisis?" +msgstr[1] "¿Enviar documentos %(count)d a la cola de análisis?" -#: views.py:157 +#: views.py:154 #, 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:179 #, 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 -msgid "Submit all documents of a type for parsing." -msgstr "Enviar todos los documentos de un tipo para su análisis." +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Enviar todos los documentos de un tipo para analizar" -#: views.py:213 +#: views.py:210 #, 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.mo b/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.mo index 6864f69b95..5cbe44e496 100644 Binary files a/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.mo differ 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 86a9e84317..6f3565aaef 100644 --- a/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/fa/LC_MESSAGES/django.po @@ -5,16 +5,16 @@ # # Translators: # Roberto Rosario, 2018 -# Mehdi Amani , 2018 +# Mehdi Amani , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" -"Last-Translator: Mehdi Amani , 2018\n" +"Last-Translator: Mehdi Amani , 2019\n" "Language-Team: Persian (https://www.transifex.com/rosarior/teams/13584/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,15 +22,15 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "تجزیه و تحلیل سند" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "جواب" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "خطاهای تجزیه برای سند: %s" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d سند اضافه شده به صف تجزیه و تحلیل" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "اسناد %(count)d اضافه شده به صف تجزیه و تحلیل" -#: views.py:144 +#: views.py:141 #, 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\" از اسناد به صف تجزیه و تحلیل" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr " ارسال \"%s\" سند به صف تجزیه و تحلیل" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "برای تجزیه و تحلیل تمام اسناد یک نوع را ارسال کنید" -#: views.py:213 +#: views.py:210 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.mo b/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.mo index 05c7c9ec81..c0fdf18c99 100644 Binary files a/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.mo differ 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 29d7fbf6a4..349bd65904 100644 --- a/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/fr/LC_MESSAGES/django.po @@ -7,17 +7,17 @@ # Roberto Rosario, 2017 # Christophe CHAUVET , 2018 # Thierry Schott , 2018 -# Yves Dubois , 2018 # Frédéric Sheedy , 2019 +# Yves Dubois , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" -"Last-Translator: Frédéric Sheedy , 2019\n" +"Last-Translator: Yves Dubois , 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" @@ -25,15 +25,15 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Analyse de document" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Résultat" -#: apps.py:136 apps.py:140 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" @@ -41,10 +41,12 @@ msgstr "Contenu" msgid "" "Utility from the poppler-utils package used to text content from PDF files." msgstr "" +"Utilitaire du paquet poppler-utils, utilisé pour générer du contenu au " +"format texte provenant de fichiers PDF." #: events.py:12 msgid "Document parsed content deleted" -msgstr "" +msgstr "Le contenu du document analysé a été supprimé." #: events.py:16 msgid "Document version submitted for parsing" @@ -63,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 "" +msgstr "Supprimer le contenu analysé" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:222 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" @@ -183,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] "" -msgstr[1] "" +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:103 #, python-format msgid "Content for document page: %s" msgstr "Contenu pour la page du document: %s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Erreurs d'analyse pour le document : %s" -#: views.py:133 +#: views.py:130 #, 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:133 #, 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:141 #, 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" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" -#: views.py:157 +#: views.py:154 #, 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:179 #, python-format msgid "Edit parsing settings for document type: %s." -msgstr "" +msgstr "Modifiez les paramètres d'analyse pour le type de document: %s." -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "Soumettre tous les documents d'un type pour analyse." +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Ajouter tous les documents d'un type à la file d'attente d'analyse" -#: views.py:213 +#: views.py:210 #, 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.mo b/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.mo index 4082ddfb8f..a99f4e563a 100644 Binary files a/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.mo differ 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 4ef3372131..6ac2fdf420 100644 --- a/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/document_parsing/locale/hu/LC_MESSAGES/django.po @@ -5,16 +5,16 @@ # # Translators: # Dezső József , 2018 -# molnars , 2018 +# molnars , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" -"Last-Translator: molnars , 2018\n" +"Last-Translator: molnars , 2019\n" "Language-Team: Hungarian (https://www.transifex.com/rosarior/teams/13584/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,15 +22,15 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "dokumentum értelmezés" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Eredmény" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "dokumentum értelmezési hibái: %s" -#: views.py:133 +#: views.py:130 #, 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:133 #, 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:141 #, 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" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "\"%s\" dokumentum feladása az értelmezési sorba" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "minden típusú dokumentum beküldése értelmezésre" -#: views.py:213 +#: views.py:210 #, 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 c5c476bdb2..00caab9df6 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -22,15 +22,15 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/it/LC_MESSAGES/django.mo b/mayan/apps/document_parsing/locale/it/LC_MESSAGES/django.mo index a5217336d0..80c74e0acb 100644 Binary files a/mayan/apps/document_parsing/locale/it/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/it/LC_MESSAGES/django.mo differ 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 7faaa64eff..fc8780f4d0 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -25,15 +25,15 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Analisi del documento" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Risultato" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "Contenuto per la pagina %s del documento" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Errori di analisi per il documento: %s" -#: views.py:133 +#: views.py:130 #, 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:133 #, 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:141 #, 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" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Aggiungi il documento \"%s\" alla coda di analisi" -#: views.py:182 +#: views.py:179 #, 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 -msgid "Submit all documents of a type for parsing." -msgstr "Sottoponi ad analisi tutti i documenti di un certo tipo." +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "" -#: views.py:213 +#: views.py:210 #, 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.mo b/mayan/apps/document_parsing/locale/lv/LC_MESSAGES/django.mo index dc6003d9d9..d792423677 100644 Binary files a/mayan/apps/document_parsing/locale/lv/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/lv/LC_MESSAGES/django.mo differ 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 3f1a755b21..6999d586a2 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -21,15 +21,15 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Dokumentu analīze" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Rezultāts" -#: apps.py:136 apps.py:140 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:222 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,61 +175,61 @@ 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:103 #, python-format msgid "Content for document page: %s" msgstr "Dokumenta lapas saturs: %s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Analīzes kļūdas dokumentam: %s" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d dokuments pievienots parsēšanas rindai" -#: views.py:136 +#: views.py:133 #, 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:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" -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ā" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Iesniegt parsēšanas rindā dokumentu \"%s\"" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "Rediģēt parsēšanas iestatījumus dokumenta tipam: %s." -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "Iesniedziet visus parsēšanai nepieciešamos dokumentus." +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "" -#: views.py:213 +#: views.py:210 #, 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 e6776bbc9c..a4408aee12 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -24,15 +24,15 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Resultaat" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, 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 cc013a5a2f..3a0640a158 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -23,15 +23,15 @@ 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:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Wynik" -#: apps.py:136 apps.py:140 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:222 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,55 +181,55 @@ 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, 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 8acd2aee12..65b25a3c4c 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -22,15 +22,15 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, 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.mo b/mayan/apps/document_parsing/locale/pt_BR/LC_MESSAGES/django.mo index 289df29def..6d9645054f 100644 Binary files a/mayan/apps/document_parsing/locale/pt_BR/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/pt_BR/LC_MESSAGES/django.mo differ 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 989bb80897..b1fa24de70 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 @@ -7,16 +7,16 @@ # Rogerio Falcone , 2017 # Roberto Rosario, 2018 # Aline Freitas , 2018 -# José Samuel Facundo da Silva , 2018 +# José Samuel Facundo da Silva , 2019 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" "PO-Revision-Date: 2017-08-25 00:49+0000\n" -"Last-Translator: José Samuel Facundo da Silva , 2018\n" +"Last-Translator: José Samuel Facundo da Silva , 2019\n" "Language-Team: Portuguese (Brazil) (https://www.transifex.com/rosarior/teams/13584/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,15 +24,15 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Análise de documentos" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "resultado" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "Conteúdo da página do documento: %s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Erros de análise do documento: %s" -#: views.py:133 +#: views.py:130 #, 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:133 #, 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:141 #, 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" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" -#: views.py:157 +#: views.py:154 #, 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:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Enviar todos os documento de um tipo para análise" -#: views.py:213 +#: views.py:210 #, 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.mo b/mayan/apps/document_parsing/locale/ro_RO/LC_MESSAGES/django.mo index 3f13936b22..9743434808 100644 Binary files a/mayan/apps/document_parsing/locale/ro_RO/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/ro_RO/LC_MESSAGES/django.mo differ 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 ec52c5850e..fecfc33402 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -24,15 +24,15 @@ 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:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "Analiza documentelor" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Rezultat" -#: apps.py:136 apps.py:140 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" @@ -45,7 +45,7 @@ msgstr "" #: events.py:12 msgid "Document parsed content deleted" -msgstr "" +msgstr "Conținutul analizat al documentului a fost șters" #: events.py:16 msgid "Document version submitted for parsing" @@ -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 "" +msgstr "Ștergeți conținutul analizat" -#: links.py:39 links.py:77 views.py:225 +#: links.py:44 links.py:82 views.py:222 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,61 +182,61 @@ 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] "" -msgstr[1] "" -msgstr[2] "" +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:103 #, python-format msgid "Content for document page: %s" msgstr "Conținutul pentru pagina documentului: %s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "Erori de analiză pentru documentul: %s" -#: views.py:133 +#: views.py:130 #, 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:133 #, 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:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" -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ă" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "Trimiteți documentul \"%s\" în coada de analiză" -#: views.py:182 +#: views.py:179 #, 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 -msgid "Submit all documents of a type for parsing." -msgstr "Trimiteți toate documentele de un anume tip pentru parsare." +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "Trimiteți toate documentele de un tip la analiză" -#: views.py:213 +#: views.py:210 #, 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 0d16129090..6e4a4a9737 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -23,15 +23,15 @@ 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:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Результат" -#: apps.py:136 apps.py:140 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:222 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,55 +183,55 @@ 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, 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 40eaaadb30..872d632387 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -21,15 +21,15 @@ 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:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "" -#: apps.py:136 apps.py:140 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:222 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,55 +179,55 @@ 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, 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 9f86ff2082..ff9ebf5d8b 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -21,15 +21,15 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "Sonuç" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" msgstr[1] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, 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 bd0155c8e5..735d3f2149 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -21,15 +21,15 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "" -#: views.py:144 +#: views.py:141 #, python-format msgid "Submit %(count)d document to the parsing queue?" -msgid_plural "Submit %(count)d documents to the parsing queue" +msgid_plural "Submit %(count)d documents to the parsing queue?" msgstr[0] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." +#: views.py:189 +msgid "Submit all documents of a type for parsing" msgstr "" -#: views.py:213 +#: views.py:210 #, python-format msgid "%(count)d documents added to the parsing queue." msgstr "" diff --git a/mayan/apps/document_parsing/locale/zh/LC_MESSAGES/django.mo b/mayan/apps/document_parsing/locale/zh/LC_MESSAGES/django.mo index 05c45fdcd0..f814bc727b 100644 Binary files a/mayan/apps/document_parsing/locale/zh/LC_MESSAGES/django.mo and b/mayan/apps/document_parsing/locale/zh/LC_MESSAGES/django.mo differ 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 e9ef05cdb0..14e49d690b 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -21,15 +21,15 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:57 events.py:8 permissions.py:8 settings.py:7 +#: apps.py:56 events.py:8 permissions.py:8 settings.py:7 msgid "Document parsing" msgstr "文档解析" -#: apps.py:131 models.py:78 +#: apps.py:130 models.py:78 msgid "Result" msgstr "结果" -#: apps.py:136 apps.py:140 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:222 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:103 #, python-format msgid "Content for document page: %s" msgstr "文档页面的内容:%s" -#: views.py:121 +#: views.py:118 #, python-format msgid "Parsing errors for document: %s" msgstr "解析文档错误:%s" -#: views.py:133 +#: views.py:130 #, python-format msgid "%(count)d document added to the parsing queue" msgstr "%(count)d文档已添加到解析队列中" -#: views.py:136 +#: views.py:133 #, python-format msgid "%(count)d documents added to the parsing queue" msgstr "%(count)d文档已添加到解析队列中" -#: views.py:144 +#: views.py:141 #, 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文档提交到解析队列" +msgid_plural "Submit %(count)d documents to the parsing queue?" +msgstr[0] "" -#: views.py:157 +#: views.py:154 #, python-format msgid "Submit document \"%s\" to the parsing queue" msgstr "将文档“%s”提交到解析队列" -#: views.py:182 +#: views.py:179 #, python-format msgid "Edit parsing settings for document type: %s." msgstr "" -#: views.py:192 -msgid "Submit all documents of a type for parsing." -msgstr "" +#: views.py:189 +msgid "Submit all documents of a type for parsing" +msgstr "提交某类型的所有文档进行解析" -#: views.py:213 +#: views.py:210 #, 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 e7792dfd70..910e994979 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() @@ -108,12 +114,12 @@ class DocumentContentViewsTestCase( def test_document_parsing_download_view_no_permission(self): response = self._request_test_document_content_download_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) - def test_download_view_with_access(self): - self.expected_content_type = 'application/octet-stream; charset=utf-8' + def test_document_parsing_download_view_with_access(self): + self.expected_content_types = ('text/html; 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 +131,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 +163,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 +182,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 +224,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..4c90ad369f 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 @@ -76,13 +75,11 @@ class DocumentContentDownloadView(SingleObjectDownloadView): model = Document object_permission = permission_content_view - def get_file(self): - file_object = DocumentContentDownloadView.TextIteratorIO( - iterator=get_document_content(document=self.get_object()) - ) - return DocumentContentDownloadView.VirtualFile( - file=file_object, name='{}-content'.format(self.get_object()) - ) + def get_download_file_object(self): + return get_document_content(document=self.object) + + def get_download_filename(self): + return '{}-content'.format(self.object) class DocumentPageContentView(SingleObjectDetailView): @@ -107,23 +104,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): @@ -142,7 +139,7 @@ class DocumentSubmitView(MultipleObjectConfirmActionView): result = { 'title': ungettext( singular='Submit %(count)d document to the parsing queue?', - plural='Submit %(count)d documents to the parsing queue', + plural='Submit %(count)d documents to the parsing queue?', number=queryset.count() ) % { 'count': queryset.count(), @@ -189,7 +186,7 @@ class DocumentTypeSettingsEditView(ExternalObjectMixin, SingleObjectEditView): class DocumentTypeSubmitView(FormView): extra_context = { - 'title': _('Submit all documents of a type for parsing.') + 'title': _('Submit all documents of a type for parsing') } form_class = DocumentTypeFilteredSelectForm post_action_redirect = reverse_lazy(viewname='common:tools_list') @@ -224,7 +221,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/icons.py b/mayan/apps/document_signatures/icons.py index 2cd7dc87ff..3da2d2701c 100644 --- a/mayan/apps/document_signatures/icons.py +++ b/mayan/apps/document_signatures/icons.py @@ -18,10 +18,12 @@ icon_document_version_signature_delete = Icon( icon_document_version_signature_details = Icon( driver_name='fontawesome', symbol='file-signature' ) - icon_document_version_signature_detached_create = Icon( driver_name='fontawesome', symbol='file-signature' ) +icon_document_version_signature_download = Icon( + driver_name='fontawesome', symbol='download' +) icon_document_version_signature_embedded_create = Icon( driver_name='fontawesome', symbol='file-signature' ) diff --git a/mayan/apps/document_signatures/links.py b/mayan/apps/document_signatures/links.py index 78d7054b10..8a6a356084 100644 --- a/mayan/apps/document_signatures/links.py +++ b/mayan/apps/document_signatures/links.py @@ -45,30 +45,6 @@ link_document_version_signature_delete = Link( tags='dangerous', text=_('Delete'), view='signatures:document_version_signature_delete', ) -link_document_version_signature_details = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_details', - permissions=(permission_document_version_signature_view,), - text=_('Details'), view='signatures:document_version_signature_details', -) -link_document_version_signature_list = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_list', - permissions=(permission_document_version_signature_view,), - text=_('Signatures'), view='signatures:document_version_signature_list' -) -link_document_version_signature_download = Link( - args='resolved_object.pk', condition=is_detached_signature, - permissions=(permission_document_version_signature_download,), - text=_('Download'), view='signatures:document_version_signature_download' -) -link_document_version_signature_upload = Link( - args='resolved_object.pk', - icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_upload', - permissions=(permission_document_version_signature_upload,), - text=_('Upload signature'), - view='signatures:document_version_signature_upload' -) link_document_version_signature_detached_create = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_detached_create', @@ -76,6 +52,19 @@ link_document_version_signature_detached_create = Link( text=_('Sign detached'), view='signatures:document_version_signature_detached_create' ) +link_document_version_signature_details = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_details', + permissions=(permission_document_version_signature_view,), + text=_('Details'), view='signatures:document_version_signature_details', +) +link_document_version_signature_download = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_download', + condition=is_detached_signature, + permissions=(permission_document_version_signature_download,), + text=_('Download'), view='signatures:document_version_signature_download' +) link_document_version_signature_embedded_create = Link( args='resolved_object.pk', icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_embedded_create', @@ -83,3 +72,16 @@ link_document_version_signature_embedded_create = Link( text=_('Sign embedded'), view='signatures:document_version_signature_embedded_create' ) +link_document_version_signature_list = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_list', + permissions=(permission_document_version_signature_view,), + text=_('Signatures'), view='signatures:document_version_signature_list' +) +link_document_version_signature_upload = Link( + args='resolved_object.pk', + icon_class_path='mayan.apps.document_signatures.icons.icon_document_version_signature_upload', + permissions=(permission_document_version_signature_upload,), + text=_('Upload signature'), + view='signatures:document_version_signature_upload' +) 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 ba96fc9b5f..63108868b2 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -108,7 +108,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "حذف" #: links.py:52 -msgid "Details" -msgstr "التفاصيل" - -#: links.py:63 -msgid "Download" -msgstr "تحميل" - -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "التفاصيل" + +#: links.py:66 +msgid "Download" +msgstr "تحميل" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 4011cc0d21..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 b1380abf10..367121fb94 100644 --- a/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/bg/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 # Pavlin Koldamov , 2012 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:27-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" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,289 +19,313 @@ 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 "Сигнатури на документа" +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" +msgstr "Ключ №" -#: apps.py:101 forms.py:64 models.py:50 +#: apps.py:102 forms.py:64 models.py:53 msgid "Signature ID" -msgstr "" +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 "" +msgstr "Тип" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" -msgstr "" +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 "" +msgstr "Фраза парола за отключване на ключа и разрешаване на използването му за подписване на версията на документа." -#: forms.py:26 +#: forms.py:26 workflow_actions.py:28 msgid "Passphrase" -msgstr "" +msgstr "Фраза парола" #: forms.py:35 msgid "Private key that will be used to sign this document version." -msgstr "" +msgstr "Частен ключ, който ще се използва за подписване на тази версия на документа." #: forms.py:46 msgid "Signature is embedded?" -msgstr "" +msgstr "Подписът е вграден?" #: forms.py:48 msgid "Signature date" -msgstr "" +msgstr "Дата на подписване" #: forms.py:51 msgid "Signature key ID" -msgstr "" +msgstr "Ключ на подписа №" #: forms.py:53 msgid "Signature key present?" -msgstr "" +msgstr "Има ли ключ за подпис?" #: forms.py:66 msgid "Key fingerprint" -msgstr "" +msgstr "Ключов отпечатък" #: forms.py:70 msgid "Key creation date" -msgstr "" +msgstr "Дата на създаване на ключа" #: forms.py:75 msgid "Key expiration date" -msgstr "" +msgstr "Дата на валидност за ключа" #: forms.py:80 msgid "Key length" -msgstr "" +msgstr "Дължина на ключа" #: forms.py:84 msgid "Key algorithm" -msgstr "" +msgstr "Алгоритъм на ключа" #: forms.py:88 msgid "Key user ID" -msgstr "" +msgstr "Номер на потребителя на ключа" #: forms.py:92 msgid "Key type" -msgstr "" +msgstr "Тип ключ" #: links.py:32 msgid "Verify all documents" -msgstr "" +msgstr "Проверете всички документи" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Подписи" #: links.py:45 msgid "Delete" -msgstr "" +msgstr "Изтрийте" #: links.py:52 +msgid "Sign detached" +msgstr "Подпис отделен" + +#: links.py:59 msgid "Details" msgstr "Детайли" -#: links.py:63 +#: links.py:66 msgid "Download" msgstr "Сваляне" -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 -msgid "Sign detached" -msgstr "" - -#: links.py:83 +#: links.py:72 msgid "Sign embedded" -msgstr "" +msgstr "Подпис вграден" + +#: links.py:85 +msgid "Upload signature" +msgstr "Качване на подпис" #: models.py:40 msgid "Document version" -msgstr "" +msgstr "Версия на документа" #: models.py:44 msgid "Date signed" -msgstr "" +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 "" +msgstr "Отпечатък на публичния ключ" -#: models.py:60 +#: models.py:64 msgid "Document version signature" -msgstr "" +msgstr "Подпис на версията на документа" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" -msgstr "" +msgstr "Подписи на версията на документа" -#: models.py:80 +#: models.py:84 msgid "Detached" -msgstr "" +msgstr "Отделен" -#: models.py:82 +#: models.py:86 msgid "Embedded" -msgstr "" +msgstr "Вграден" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" -msgstr "" +msgstr "Вграден подпис на версия на документа" -#: models.py:98 +#: models.py:102 msgid "Document version embedded signatures" -msgstr "" +msgstr "Вградени подписи на версия на документа" -#: models.py:131 +#: models.py:135 +msgid "Signature file previously generated." +msgstr "Предварително създаден файл с подпис." + +#: models.py:137 msgid "Signature file" -msgstr "Файл със сигнатура" +msgstr "Файл с подпис" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" -msgstr "" +msgstr "Отделен подпис на версия на документа" -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" -msgstr "" +msgstr "Отделени подписи на версия на документа" -#: models.py:142 +#: models.py:147 msgid "signature" -msgstr "" +msgstr "подпис" #: permissions.py:12 msgid "Sign documents with detached signatures" -msgstr "" +msgstr "Подписвайте документи с отделени подписи" #: permissions.py:16 msgid "Sign documents with embedded signatures" -msgstr "" +msgstr "Подписвайте документи с вградени подписи" #: permissions.py:20 msgid "Delete detached signatures" -msgstr "Изтриване на несвързани сигнатури" +msgstr "Изтриване на отделени подписи" #: permissions.py:24 msgid "Download detached document signatures" -msgstr "" +msgstr "Изтегляне на отделени подписи на документи" #: permissions.py:28 msgid "Upload detached document signatures" -msgstr "" +msgstr "Качване на отделени подписи на документи" #: permissions.py:32 msgid "Verify document signatures" -msgstr "Проверете сигнатурите на документа" +msgstr "Проверете подписите на документа" #: permissions.py:36 msgid "View details of document signatures" -msgstr "" +msgstr "Вижте подробности за подписите на документи" #: queues.py:12 msgid "Verify key signatures" -msgstr "" +msgstr "Проверете подписите с ключ" #: queues.py:16 msgid "Unverify key signatures" -msgstr "" +msgstr "Откажете проверка на подписите с ключ" #: queues.py:20 msgid "Verify document version" -msgstr "" +msgstr "Проверете версията на документа" #: queues.py:25 msgid "Verify missing embedded signature" -msgstr "" +msgstr "Проверете за липсващ вграден подпис" -#: settings.py:15 +#: settings.py:21 msgid "Path to the Storage subclass to use when storing detached signatures." -msgstr "" +msgstr "Път към подклас Storage, който да се използва при съхранение на отделени подписи." -#: settings.py:24 +#: settings.py:30 msgid "Arguments to pass to the SIGNATURE_STORAGE_BACKEND. " -msgstr "" +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 "" +msgstr "За отключване на този ключ е необходима фраза парола." -#: views.py:79 views.py:170 +#: views.py:81 views.py:163 msgid "Passphrase is incorrect." -msgstr "" +msgstr "Фразата парола е неправилна." -#: views.py:101 views.py:191 +#: views.py:92 views.py:174 msgid "Document version signed successfully." -msgstr "" +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 "" +msgstr "Подпишете версия на документа "%s" с отделен подпис" -#: views.py:224 +#: views.py:209 #, python-format msgid "Sign document version \"%s\" with a embedded signature" -msgstr "" +msgstr "Подпишете версия на документа "%s" с вграден подпис" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" -msgstr "" +msgstr "Изтрийте отделен подпис: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" -msgstr "" +msgstr "Подробности за подпис: %s" -#: views.py:300 +#: views.py:275 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 "" +msgstr "Подписите помагат за предоставяне на доказателства за авторство и откриване на подправки. Те са много сигурни и трудно подправящи се. Подписът може да бъде вграден като част от самия документ или качен като отделен файл." -#: views.py:328 +#: views.py:303 msgid "There are no signatures for this document." -msgstr "" +msgstr "Няма подписи за този документ." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" -msgstr "" +msgstr "Подписи за версия на документа: %s" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" -msgstr "" +msgstr "Качете отделен подпис за версия на документа: %s" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." msgstr "При големи бази данни тази операция може да отнеме известно време за изпълнение." -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" -msgstr "" +msgstr "Проверете всички документи за подписи?" -#: views.py:389 +#: views.py:364 msgid "Signature verification queued successfully." -msgstr "" +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 856292063a..68c128e5bb 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -110,7 +110,7 @@ msgstr "Ključni tip" msgid "Verify all documents" msgstr "Provjerite sve dokumente" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Potpisi" @@ -119,25 +119,25 @@ msgid "Delete" msgstr "Obriši" #: links.py:52 -msgid "Details" -msgstr "Detalji" - -#: links.py:63 -msgid "Download" -msgstr "Download" - -#: links.py:69 -msgid "Upload signature" -msgstr "Otpremi potpis" - -#: links.py:76 msgid "Sign detached" msgstr "Znak odvojen" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detalji" + +#: links.py:66 +msgid "Download" +msgstr "Download" + +#: links.py:72 msgid "Sign embedded" msgstr "Znak ugradjen" +#: links.py:85 +msgid "Upload signature" +msgstr "Otpremi potpis" + #: models.py:40 msgid "Document version" msgstr "Verzija dokumenta" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Potpisi za verziju dokumenta: %s" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Otpremanje odvojenog potpisa za verziju dokumenta: %s" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "Proverite sve dokumente za potpis?" -#: views.py:389 +#: views.py:364 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 66c20f7945..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 cde7d2a4cb..6a901b7842 100644 --- a/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_signatures/locale/cs/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -17,289 +18,313 @@ 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 "" +msgstr "Podpisy dokumentů" -#: apps.py:94 +#: apps.py:95 msgid "Date" -msgstr "" +msgstr "Datum" -#: apps.py:97 models.py:46 +#: apps.py:98 models.py:48 msgid "Key ID" -msgstr "" +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 "" +msgstr "ID podpisu" -#: apps.py:102 forms.py:76 +#: apps.py:103 forms.py:76 msgid "None" -msgstr "" +msgstr "žádný" -#: apps.py:105 +#: apps.py:106 msgid "Type" -msgstr "" +msgstr "Typ" -#: forms.py:19 forms.py:33 +#: forms.py:19 forms.py:33 workflow_actions.py:20 msgid "Key" -msgstr "" +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 "" +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 "" +msgstr "Přístupová fráze" #: forms.py:35 msgid "Private key that will be used to sign this document version." -msgstr "" +msgstr "Soukromý klíč, který bude použit k podepsání této verze dokumentu." #: forms.py:46 msgid "Signature is embedded?" -msgstr "" +msgstr "Podpis je vložen?" #: forms.py:48 msgid "Signature date" -msgstr "" +msgstr "Datum podpisu" #: forms.py:51 msgid "Signature key ID" -msgstr "" +msgstr "ID klíče podpisu" #: forms.py:53 msgid "Signature key present?" -msgstr "" +msgstr "Klíč podpisu je přítomen?" #: forms.py:66 msgid "Key fingerprint" -msgstr "" +msgstr "Otisk klíče" #: forms.py:70 msgid "Key creation date" -msgstr "" +msgstr "Datum vytvoření klíče" #: forms.py:75 msgid "Key expiration date" -msgstr "" +msgstr "Datum vypršení platnosti klíče" #: forms.py:80 msgid "Key length" -msgstr "" +msgstr "Délka klíče" #: forms.py:84 msgid "Key algorithm" -msgstr "" +msgstr "Klíčový algoritmus" #: forms.py:88 msgid "Key user ID" -msgstr "" +msgstr "Klíč uživatele ID" #: forms.py:92 msgid "Key type" -msgstr "" +msgstr "Typ klíče" #: links.py:32 msgid "Verify all documents" -msgstr "" +msgstr "Ověřte všechny dokumenty" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" -msgstr "" +msgstr "Podpisy" #: links.py:45 msgid "Delete" msgstr "Odstranit" #: links.py:52 +msgid "Sign detached" +msgstr "Podpis odpojen" + +#: links.py:59 msgid "Details" msgstr "Detail" -#: links.py:63 +#: links.py:66 msgid "Download" -msgstr "" +msgstr "Stažení" -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 -msgid "Sign detached" -msgstr "" - -#: links.py:83 +#: links.py:72 msgid "Sign embedded" -msgstr "" +msgstr "Podpis vložen" + +#: links.py:85 +msgid "Upload signature" +msgstr "Nahrajte podpis" #: models.py:40 msgid "Document version" -msgstr "" +msgstr "Verze dokumentu" #: models.py:44 msgid "Date signed" +msgstr "Datum podepsání" + +#: models.py:47 +msgid "ID of the key that will be used to sign the document." msgstr "" -#: models.py:54 +#: models.py:57 msgid "Public key fingerprint" -msgstr "" +msgstr "Otisk veřejného klíče" -#: models.py:60 +#: models.py:64 msgid "Document version signature" -msgstr "" +msgstr "Podpis verze dokumentu" -#: models.py:61 +#: models.py:65 msgid "Document version signatures" -msgstr "" +msgstr "Podpisy verze dokumentu" -#: models.py:80 +#: models.py:84 msgid "Detached" -msgstr "" +msgstr "Odpojeno" -#: models.py:82 +#: models.py:86 msgid "Embedded" -msgstr "" +msgstr "Vloženo" -#: models.py:97 +#: models.py:101 msgid "Document version embedded signature" -msgstr "" +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:135 +msgid "Signature file previously generated." msgstr "" -#: models.py:131 +#: models.py:137 msgid "Signature file" -msgstr "" +msgstr "Podpisový soubor" -#: models.py:138 +#: models.py:143 msgid "Document version detached signature" -msgstr "" +msgstr "Podpis verze dokumentu byl odpojen." -#: models.py:139 +#: models.py:144 msgid "Document version detached signatures" -msgstr "" +msgstr "Oddělené podpisy verze dokumentu" -#: models.py:142 +#: models.py:147 msgid "signature" -msgstr "" +msgstr "podpis" #: permissions.py:12 msgid "Sign documents with detached signatures" -msgstr "" +msgstr "Podepisujte dokumenty oddělenými podpisy" #: permissions.py:16 msgid "Sign documents with embedded signatures" -msgstr "" +msgstr "Podepisujte dokumenty s vloženými podpisy" #: permissions.py:20 msgid "Delete detached signatures" -msgstr "" +msgstr "Odstraňte oddělené podpisy" #: permissions.py:24 msgid "Download detached document signatures" -msgstr "" +msgstr "Stáhněte si oddělené podpisy dokumentů" #: permissions.py:28 msgid "Upload detached document signatures" -msgstr "" +msgstr "Nahrajte oddělené podpisy dokumentů" #: permissions.py:32 msgid "Verify document signatures" -msgstr "" +msgstr "Ověřte podpisy dokumentu" #: permissions.py:36 msgid "View details of document signatures" -msgstr "" +msgstr "Zobrazit podrobnosti o podpisech dokumentů" #: queues.py:12 msgid "Verify key signatures" -msgstr "" +msgstr "Ověřené podpisy klíče" #: queues.py:16 msgid "Unverify key signatures" -msgstr "" +msgstr "Zrušit ověření podpisů klíčů " #: queues.py:20 msgid "Verify document version" -msgstr "" +msgstr "Ověřte verzi dokumentu" #: queues.py:25 msgid "Verify missing embedded signature" -msgstr "" +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 "" +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 "" +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 "" +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 "" +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:118 views.py:207 +msgid "Sign" msgstr "" -#: views.py:127 +#: views.py:120 #, python-format msgid "Sign document version \"%s\" with a detached signature" -msgstr "" +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 "" +msgstr "Podepište verzi dokumentu "%s" vloženým podpisem" -#: views.py:240 +#: views.py:225 #, python-format msgid "Delete detached signature: %s" -msgstr "" +msgstr "Odstranit odpojený podpis: %s" -#: views.py:260 +#: views.py:245 #, python-format msgid "Details for signature: %s" -msgstr "" +msgstr "Podrobnosti pro podpis: %s" -#: views.py:300 +#: views.py:275 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 "" +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:303 msgid "There are no signatures for this document." -msgstr "" +msgstr "Pro tento dokument neexistují žádné podpisy." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" -msgstr "" +msgstr "Podpisy pro verzi dokumentu: %s" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" -msgstr "" +msgstr "Nahrajte odpojený podpis pro verzi dokumentu: %s" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." -msgstr "" +msgstr "Ve velkých databázích může provedení této operace nějakou dobu trvat." -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" +msgstr "Ověřit podpis všech dokumentů?" + +#: views.py:364 +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 "" -#: views.py:389 -msgid "Signature verification queued successfully." +#: 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 df74289604..9aa971ebce 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -107,7 +107,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "" @@ -116,25 +116,25 @@ msgid "Delete" msgstr "Slet" #: links.py:52 -msgid "Details" -msgstr "Detaljer" - -#: links.py:63 -msgid "Download" -msgstr "Download" - -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detaljer" + +#: links.py:66 +msgid "Download" +msgstr "Download" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "" + #: models.py:40 msgid "Document version" msgstr "Dokumentversion" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." msgstr "" -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 237d8b7250..756dad6b8a 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-05-08 22:16+0000\n" -"Last-Translator: Mathias Behrle \n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -114,7 +114,7 @@ msgstr "Schlüsseltyp" msgid "Verify all documents" msgstr "Alle Dokumente überprüfen" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Unterschriften" @@ -123,25 +123,25 @@ msgid "Delete" msgstr "Löschen" #: links.py:52 -msgid "Details" -msgstr "Details" - -#: links.py:63 -msgid "Download" -msgstr "Herunterladen" - -#: links.py:69 -msgid "Upload signature" -msgstr "Unterschrift hochladen" - -#: links.py:76 msgid "Sign detached" msgstr "Unterschrift separat" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Details" + +#: links.py:66 +msgid "Download" +msgstr "Herunterladen" + +#: links.py:72 msgid "Sign embedded" msgstr "Unterschrift eingebettet" +#: links.py:85 +msgid "Upload signature" +msgstr "Unterschrift hochladen" + #: models.py:40 msgid "Document version" msgstr "Dokumentenversion" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "Keine Unterschriften für dieses Dokument vorhanden." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Unterschriften für Dokumentenversion: %s" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Seperate Unterschrift für Dokumentenversion %s hochladen" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "Alle Dokumentenunterschriften überprüfen?" -#: views.py:389 +#: views.py:364 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 17698e2f34..0b279b05a0 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "Μυστική φράση" @@ -107,7 +107,7 @@ msgstr "Τύπος κλειδιού" msgid "Verify all documents" msgstr "Απολήθευση όλων τωνεγγράφων" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Υπογραφές" @@ -116,25 +116,25 @@ msgid "Delete" msgstr "Διαγραφή" #: links.py:52 -msgid "Details" -msgstr "Λεπτομέρειες" - -#: links.py:63 -msgid "Download" -msgstr "Κατέβασμα" - -#: links.py:69 -msgid "Upload signature" -msgstr "Ανέβασμα υπογραφής" - -#: links.py:76 msgid "Sign detached" msgstr "Υπογραφή με αποσπασμένο κλειδί" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Λεπτομέρειες" + +#: links.py:66 +msgid "Download" +msgstr "Κατέβασμα" + +#: links.py:72 msgid "Sign embedded" msgstr "Υπογαφή με συμπερίληψη του κελιδιού" +#: links.py:85 +msgid "Upload signature" +msgstr "Ανέβασμα υπογραφής" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Υπογραφές για την έκδοση του εγγράφου: %s" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Ανέβασμα αποσπασμένης υπογραφής για την έκδοση του εγγράφου: %s" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." msgstr "Σε μεγάλες βάσεις δεδομένων αυτή η ενέργεια μπορεί να χρειαστεί αρκετό χρόνο για να ολοκληρωθεί." -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" msgstr "Επαλήθευση όλων των υπογρφών για έγγραφα;" -#: views.py:389 +#: views.py:364 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 994ec5e937..52914ef14e 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-09-24 23:10-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -107,7 +107,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "" @@ -116,25 +116,25 @@ msgid "Delete" msgstr "" #: links.py:52 -msgid "Details" -msgstr "" - -#: links.py:63 -msgid "Download" -msgstr "" - -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "" + +#: links.py:66 +msgid "Download" +msgstr "" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." msgstr "" -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 bc5949fcd7..b1ed72b921 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-30 16:40+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -111,7 +111,7 @@ msgstr "Tipo de llave" msgid "Verify all documents" msgstr "Verificar todos los documents" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Firma" @@ -120,25 +120,25 @@ msgid "Delete" msgstr "Borrar" #: links.py:52 -msgid "Details" -msgstr "Detalles" - -#: links.py:63 -msgid "Download" -msgstr "Descargar" - -#: links.py:69 -msgid "Upload signature" -msgstr "Subir firma" - -#: links.py:76 msgid "Sign detached" msgstr "Firma aparte" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detalles" + +#: links.py:66 +msgid "Download" +msgstr "Descargar" + +#: links.py:72 msgid "Sign embedded" msgstr "Firma integrada" +#: links.py:85 +msgid "Upload signature" +msgstr "Subir firma" + #: models.py:40 msgid "Document version" msgstr "Versión de documento" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "No hay firmas para este documento." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Firmas para la versión de documento: %s" -#: views.py:361 +#: views.py:336 #, 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:353 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:354 msgid "Verify all document for signatures?" msgstr "¿Verificar todos los documentos para firmas?" -#: views.py:389 +#: views.py:364 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 4a55f30ed9..6687e94710 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "عبارت عبور" @@ -108,7 +108,7 @@ msgstr "نوع کلید" msgid "Verify all documents" msgstr "همه اسناد را تأیید کنید" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "امضا" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "حذف" #: links.py:52 -msgid "Details" -msgstr "جزئیات" - -#: links.py:63 -msgid "Download" -msgstr "دانلود" - -#: links.py:69 -msgid "Upload signature" -msgstr "امضا آپلود" - -#: links.py:76 msgid "Sign detached" msgstr "مستقل نشوید" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "جزئیات" + +#: links.py:66 +msgid "Download" +msgstr "دانلود" + +#: links.py:72 msgid "Sign embedded" msgstr "ورودی جاسازی شده" +#: links.py:85 +msgid "Upload signature" +msgstr "امضا آپلود" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "امضا برای نسخه سند: %s" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "امضای جداگانه برای نسخه سند آپلود: %s" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." msgstr "در پایگاه داده های بزرگ این عملیات ممکن است برای اجرای برخی از زمان ها طول بکشد." -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" msgstr "همه سند را برای امضاء تأیید کنید؟" -#: views.py:389 +#: views.py:364 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 9a5bcd3dee..0620210729 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-05-17 12:04+0000\n" -"Last-Translator: Frédéric Sheedy \n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -113,7 +114,7 @@ msgstr "Type de clé" msgid "Verify all documents" msgstr "Vérifier tous les documents" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Signatures" @@ -122,25 +123,25 @@ msgid "Delete" msgstr "Supprimer" #: links.py:52 -msgid "Details" -msgstr "Détails" - -#: links.py:63 -msgid "Download" -msgstr "Télécharger" - -#: links.py:69 -msgid "Upload signature" -msgstr "Transférer une signature" - -#: links.py:76 msgid "Sign detached" msgstr "Signature détachée" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Détails" + +#: links.py:66 +msgid "Download" +msgstr "Télécharger" + +#: links.py:72 msgid "Sign embedded" msgstr "Signature intégrée" +#: links.py:85 +msgid "Upload signature" +msgstr "Transférer une signature" + #: models.py:40 msgid "Document version" msgstr "Version du document" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "Il n'y a pas de signatures pour ce document." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Signatures pour cette version du document : %s" -#: views.py:361 +#: views.py:336 #, 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:353 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:354 msgid "Verify all document for signatures?" msgstr "Vérifier les signatures de tous les documents ?" -#: views.py:389 +#: views.py:364 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 ce19d8eb82..c8ba895e9d 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -108,7 +108,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "Törlés" #: links.py:52 -msgid "Details" -msgstr "Részletek" - -#: links.py:63 -msgid "Download" -msgstr "Letöltés" - -#: links.py:69 -msgid "Upload signature" -msgstr "Aláírás feltöltése" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Részletek" + +#: links.py:66 +msgid "Download" +msgstr "Letöltés" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "Aláírás feltöltése" + #: models.py:40 msgid "Document version" msgstr "Dokumentum verzió" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 fc380fc785..f5fde00cae 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-05-12 17:54+0000\n" -"Last-Translator: Adek Lanin\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -107,7 +107,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "" @@ -116,25 +116,25 @@ msgid "Delete" msgstr "Hapus" #: links.py:52 -msgid "Details" -msgstr "Detail" - -#: links.py:63 -msgid "Download" -msgstr "Unduh" - -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detail" + +#: links.py:66 +msgid "Download" +msgstr "Unduh" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "" + #: models.py:40 msgid "Document version" msgstr "Versi dokumen" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 9a081d7542..a897557f70 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-08-28 12:12+0000\n" -"Last-Translator: Daniele Bortoluzzi \n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -111,7 +111,7 @@ msgstr "Tipo chiave" msgid "Verify all documents" msgstr "Verifica tutti i documenti" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Firme" @@ -120,25 +120,25 @@ msgid "Delete" msgstr "Cancella" #: links.py:52 -msgid "Details" -msgstr "Dettagli" - -#: links.py:63 -msgid "Download" -msgstr "Scarica" - -#: links.py:69 -msgid "Upload signature" -msgstr "Carica firma" - -#: links.py:76 msgid "Sign detached" msgstr "Firma scollegata" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Dettagli" + +#: links.py:66 +msgid "Download" +msgstr "Scarica" + +#: links.py:72 msgid "Sign embedded" msgstr "Firma incorporata" +#: links.py:85 +msgid "Upload signature" +msgstr "Carica firma" + #: models.py:40 msgid "Document version" msgstr "Versione documento" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "Non ci sono firme per questo documento." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Firme per la versione del documento: %s" -#: views.py:361 +#: views.py:336 #, 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:353 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:354 msgid "Verify all document for signatures?" msgstr "Verificare le firme per tutti i documenti?" -#: views.py:389 +#: views.py:364 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 7098fc1349..96be5f3c3a 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-06-27 13:01+0000\n" -"Last-Translator: Māris Teivāns \n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -108,7 +108,7 @@ msgstr "Atslēgu tips" msgid "Verify all documents" msgstr "Pārbaudiet visus dokumentus" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Paraksti" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "Dzēst" #: links.py:52 -msgid "Details" -msgstr "Detaļas" - -#: links.py:63 -msgid "Download" -msgstr "Lejupielādēt" - -#: links.py:69 -msgid "Upload signature" -msgstr "Augšupielādes paraksts" - -#: links.py:76 msgid "Sign detached" msgstr "Sign atdalīts" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detaļas" + +#: links.py:66 +msgid "Download" +msgstr "Lejupielādēt" + +#: links.py:72 msgid "Sign embedded" msgstr "Zīme ir iestrādāta" +#: links.py:85 +msgid "Upload signature" +msgstr "Augšupielādes paraksts" + #: models.py:40 msgid "Document version" msgstr "Dokumenta versija" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "Šim dokumentam nav parakstu." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Paraksti dokumenta versijai: %s" -#: views.py:361 +#: views.py:336 #, 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:353 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:354 msgid "Verify all document for signatures?" msgstr "Pārbaudiet visus dokumentus parakstiem?" -#: views.py:389 +#: views.py:364 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 6a70f98891..a5084601c2 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -108,7 +108,7 @@ msgstr "Sleutelsoort" msgid "Verify all documents" msgstr "Verifieer alle documenten" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Handtekeningen" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "Verwijder" #: links.py:52 -msgid "Details" -msgstr "Gegevens" - -#: links.py:63 -msgid "Download" -msgstr "Download" - -#: links.py:69 -msgid "Upload signature" -msgstr "Handtekening uploaden" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Gegevens" + +#: links.py:66 +msgid "Download" +msgstr "Download" + +#: links.py:72 msgid "Sign embedded" msgstr "Teken ingesloten" +#: links.py:85 +msgid "Upload signature" +msgstr "Handtekening uploaden" + #: models.py:40 msgid "Document version" msgstr "Documentversie" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 b651d67893..df99162309 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -108,7 +108,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Podpisy" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "Usuń" #: links.py:52 -msgid "Details" -msgstr "Szczegóły" - -#: links.py:63 -msgid "Download" -msgstr "Pobierz" - -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Szczegóły" + +#: links.py:66 +msgid "Download" +msgstr "Pobierz" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "" + #: models.py:40 msgid "Document version" msgstr "Wersja dokumentu" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 cb856f3427..19a2107296 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -108,7 +108,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Assinaturas" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "Eliminar" #: links.py:52 -msgid "Details" -msgstr "Detalhes" - -#: links.py:63 -msgid "Download" -msgstr "Descarregar" - -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detalhes" + +#: links.py:66 +msgid "Download" +msgstr "Descarregar" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 c849b44e79..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 5092cb43bd..3f47320186 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 @@ -5,13 +5,14 @@ # Translators: # Aline Freitas , 2016 # José Samuel Facundo da Silva , 2018 +# Rodrigo de Almeida Sottomaior Macedo , 2019 # Rogerio Falcone , 2015 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -20,47 +21,47 @@ 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 "" +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" #: forms.py:35 msgid "Private key that will be used to sign this document version." -msgstr "" +msgstr "Chave privada que será usada para assinar esta versão do documento." #: forms.py:46 msgid "Signature is embedded?" @@ -110,7 +111,7 @@ msgstr "Tipo de chave" msgid "Verify all documents" msgstr "Verificar todos os documentos" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Assinaturas" @@ -119,25 +120,25 @@ msgid "Delete" msgstr "Excluir" #: links.py:52 -msgid "Details" -msgstr "Detalhes" - -#: links.py:63 -msgid "Download" -msgstr "Baixar" - -#: links.py:69 -msgid "Upload signature" -msgstr "Upload da assinatura" - -#: links.py:76 msgid "Sign detached" msgstr "Assinatura destacada" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detalhes" + +#: links.py:66 +msgid "Download" +msgstr "Baixar" + +#: links.py:72 msgid "Sign embedded" msgstr "Assinatura integrada" +#: links.py:85 +msgid "Upload signature" +msgstr "Upload da assinatura" + #: models.py:40 msgid "Document version" msgstr "Versão do Documento" @@ -146,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" @@ -234,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:275 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:303 msgid "There are no signatures for this document." msgstr "Não há assinaturas para este documento." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Assinaturas para a versão do documento: %s" -#: views.py:361 +#: views.py:336 #, 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:353 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:354 msgid "Verify all document for signatures?" msgstr "Verificar todos os documentos para assinaturas?" -#: views.py:389 +#: views.py:364 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 b2bf88c520..e11d7950f1 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-05-02 05:17+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -109,7 +109,7 @@ msgstr "Tipul cheii" msgid "Verify all documents" msgstr "Verificați toate documentele" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Semnături" @@ -118,25 +118,25 @@ msgid "Delete" msgstr "Șterge" #: links.py:52 -msgid "Details" -msgstr "Detalii" - -#: links.py:63 -msgid "Download" -msgstr "Descarcă" - -#: links.py:69 -msgid "Upload signature" -msgstr "Încărcați semnătura" - -#: links.py:76 msgid "Sign detached" msgstr "Semnează detașat" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detalii" + +#: links.py:66 +msgid "Download" +msgstr "Descarcă" + +#: links.py:72 msgid "Sign embedded" msgstr "Semnează încorporat" +#: links.py:85 +msgid "Upload signature" +msgstr "Încărcați semnătura" + #: models.py:40 msgid "Document version" msgstr "Versiune document" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "Nu există semnături pentru acest document." -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Semnături pentru versiunea documentului: %s" -#: views.py:361 +#: views.py:336 #, 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:353 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:354 msgid "Verify all document for signatures?" msgstr "Verificați toate documentele pentru semnături?" -#: views.py:389 +#: views.py:364 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 1230138230..1f4f46b201 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "Кодовая фраза" @@ -109,7 +109,7 @@ msgstr "Тип ключа" msgid "Verify all documents" msgstr "Проверить все документы" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "Подписи" @@ -118,25 +118,25 @@ msgid "Delete" msgstr "Удалить" #: links.py:52 -msgid "Details" -msgstr "Детали" - -#: links.py:63 -msgid "Download" -msgstr "Скачать" - -#: links.py:69 -msgid "Upload signature" -msgstr "Вгрузить подпись" - -#: links.py:76 msgid "Sign detached" msgstr "Подпись отеделена" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Детали" + +#: links.py:66 +msgid "Download" +msgstr "Скачать" + +#: links.py:72 msgid "Sign embedded" msgstr "Подпись встроена" +#: links.py:85 +msgid "Upload signature" +msgstr "Вгрузить подпись" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Подписи для документа версии: %s" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "Выгрузить отделённую подпись для версии документа: %s" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." msgstr "В больших базах данных эта операция может занять некоторое время для выполнения." -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" msgstr "Проверить подписи во всех документах?" -#: views.py:389 +#: views.py:364 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 d8c92fec7e..55819988ec 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -107,7 +107,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "" @@ -116,25 +116,25 @@ msgid "Delete" msgstr "Izbriši" #: links.py:52 -msgid "Details" -msgstr "Podrobnosti" - -#: links.py:63 -msgid "Download" -msgstr "Prenos" - -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Podrobnosti" + +#: links.py:66 +msgid "Download" +msgstr "Prenos" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 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:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 c5fe805d03..87c57229db 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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" @@ -108,7 +108,7 @@ msgstr "Anahtar türü" msgid "Verify all documents" msgstr "Tüm belgeleri doğrulayın" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "İmzalar" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "Sil" #: links.py:52 -msgid "Details" -msgstr "Detaylar" - -#: links.py:63 -msgid "Download" -msgstr "İndir" - -#: links.py:69 -msgid "Upload signature" -msgstr "İmza yükle" - -#: links.py:76 msgid "Sign detached" msgstr "Ayrılmış olarak imzala" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Detaylar" + +#: links.py:66 +msgid "Download" +msgstr "İndir" + +#: links.py:72 msgid "Sign embedded" msgstr "Gömülmüş olarak imzala" +#: links.py:85 +msgid "Upload signature" +msgstr "İmza yükle" + #: models.py:40 msgid "Document version" msgstr "Belge versiyonu" @@ -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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "Belge sürümünün imzaları: %s" -#: views.py:361 +#: views.py:336 #, 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:353 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:354 msgid "Verify all document for signatures?" msgstr "İmzalar için tüm belgeleri doğruluyor musunuz?" -#: views.py:389 +#: views.py:364 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 0acb3b3161..98bd7da892 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "" @@ -108,7 +108,7 @@ msgstr "" msgid "Verify all documents" msgstr "" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "" #: links.py:52 -msgid "Details" -msgstr "Chi tiết" - -#: links.py:63 -msgid "Download" -msgstr "" - -#: links.py:69 -msgid "Upload signature" -msgstr "" - -#: links.py:76 msgid "Sign detached" msgstr "" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "Chi tiết" + +#: links.py:66 +msgid "Download" +msgstr "" + +#: links.py:72 msgid "Sign embedded" msgstr "" +#: links.py:85 +msgid "Upload signature" +msgstr "" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." msgstr "" -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" msgstr "" -#: views.py:389 +#: views.py:364 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 b0411d9305..57f75bd99e 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-09-24 23:10-0400\n" -"PO-Revision-Date: 2019-04-27 22:53+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-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 "密码" @@ -108,7 +108,7 @@ msgstr "密钥类型" msgid "Verify all documents" msgstr "验证所有文档" -#: links.py:39 links.py:58 queues.py:9 +#: links.py:39 links.py:79 queues.py:9 msgid "Signatures" msgstr "签名" @@ -117,25 +117,25 @@ msgid "Delete" msgstr "删除" #: links.py:52 -msgid "Details" -msgstr "细节" - -#: links.py:63 -msgid "Download" -msgstr "下载" - -#: links.py:69 -msgid "Upload signature" -msgstr "上传签名" - -#: links.py:76 msgid "Sign detached" msgstr "分离签署" -#: links.py:83 +#: links.py:59 +msgid "Details" +msgstr "细节" + +#: links.py:66 +msgid "Download" +msgstr "下载" + +#: links.py:72 msgid "Sign embedded" msgstr "嵌入签署" +#: links.py:85 +msgid "Upload signature" +msgstr "上传签名" + #: models.py:40 msgid "Document version" 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:275 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:303 msgid "There are no signatures for this document." msgstr "此文档没有签名。" -#: views.py:331 +#: views.py:306 #, python-format msgid "Signatures for document version: %s" msgstr "文档版本%s的签名" -#: views.py:361 +#: views.py:336 #, python-format msgid "Upload detached signature for document version: %s" msgstr "上传文档版本%s的分离签名" -#: views.py:378 +#: views.py:353 msgid "On large databases this operation may take some time to execute." msgstr "在大型数据库上,此操作可能需要一些时间才能执行。" -#: views.py:379 +#: views.py:354 msgid "Verify all document for signatures?" msgstr "验证签名的所有文档?" -#: views.py:389 +#: views.py:364 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..3442b1ebb8 --- /dev/null +++ b/mayan/apps/document_signatures/setting_migrations.py @@ -0,0 +1,13 @@ +from __future__ import unicode_literals + +from mayan.apps.smart_settings.classes import NamespaceMigration +from mayan.apps.smart_settings.utils import smart_yaml_load + + +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 smart_yaml_load(value=value) 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/literals.py b/mayan/apps/document_signatures/tests/literals.py index 040366be1e..49aebf355a 100644 --- a/mayan/apps/document_signatures/tests/literals.py +++ b/mayan/apps/document_signatures/tests/literals.py @@ -12,9 +12,9 @@ TEST_SIGNATURE_FILE_PATH = os.path.join( settings.BASE_DIR, 'apps', 'document_signatures', 'tests', 'contrib', 'sample_documents', 'mayan_11_1.pdf.sig' ) -TEST_KEY_FILE = os.path.join( +TEST_KEY_FILE_PATH = os.path.join( settings.BASE_DIR, 'apps', 'document_signatures', 'tests', 'contrib', 'sample_documents', 'key0x5F3F7F75D210724D.asc' ) -TEST_KEY_ID = '5F3F7F75D210724D' +TEST_KEY_PUBLIC_ID = '5F3F7F75D210724D' TEST_SIGNATURE_ID = 'XVkoGKw35yU1iq11dZPiv7uAY7k' diff --git a/mayan/apps/document_signatures/tests/mixins.py b/mayan/apps/document_signatures/tests/mixins.py index aafafa93f8..9bd93f2b12 100644 --- a/mayan/apps/document_signatures/tests/mixins.py +++ b/mayan/apps/document_signatures/tests/mixins.py @@ -3,13 +3,136 @@ from __future__ import absolute_import, unicode_literals from django.core.files import File from mayan.apps.django_gpg.models import Key +from mayan.apps.django_gpg.tests.literals import TEST_KEY_PRIVATE_PASSPHRASE from ..models import DetachedSignature -from .literals import TEST_KEY_FILE, TEST_SIGNATURE_FILE_PATH +from .literals import TEST_KEY_FILE_PATH, TEST_SIGNATURE_FILE_PATH -class SignaturesTestMixin(object): +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( + viewname='signatures:document_version_signature_detached_create', + kwargs={'pk': self.test_document_version.pk}, data={ + 'key': self.test_key_private.pk, + 'passphrase': TEST_KEY_PRIVATE_PASSPHRASE + } + ) + + def _request_test_document_version_signature_download_view(self): + return self.get( + viewname='signatures:document_version_signature_download', + kwargs={'pk': self.test_signature.pk} + ) + + def _request_test_document_version_signature_upload_view(self): + with open(TEST_SIGNATURE_FILE_PATH, mode='rb') as file_object: + return self.post( + viewname='signatures:document_version_signature_upload', + kwargs={'pk': self.test_document.latest_version.pk}, + data={'signature_file': file_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( + viewname='signatures:document_version_signature_embedded_create', + kwargs={'pk': self.test_document_version.pk}, data={ + 'key': self.test_key_private.pk, + 'passphrase': TEST_KEY_PRIVATE_PASSPHRASE + } + ) + + +class SignatureTestMixin(object): def _create_test_detached_signature(self): with open(TEST_SIGNATURE_FILE_PATH, mode='rb') as file_object: self.test_signature = DetachedSignature.objects.create( @@ -17,6 +140,33 @@ class SignaturesTestMixin(object): signature_file=File(file_object) ) - def _create_test_key(self): - with open(TEST_KEY_FILE, mode='rb') as file_object: - self.test_key = Key.objects.create(key_data=file_object.read()) + def _create_test_key_public(self): + with open(TEST_KEY_FILE_PATH, mode='rb') as file_object: + self.test_key_public = Key.objects.create( + key_data=file_object.read() + ) + + +class SignatureViewTestMixin(object): + def _request_test_document_version_signature_delete_view(self): + return self.post( + viewname='signatures:document_version_signature_delete', + kwargs={'pk': self.test_signature.pk} + ) + + def _request_test_document_version_signature_details_view(self): + return self.get( + viewname='signatures:document_version_signature_details', + kwargs={'pk': self.test_signature.pk} + ) + + def _request_test_document_version_signature_list_view(self, document): + return self.get( + viewname='signatures:document_version_signature_list', + kwargs={'pk': self.test_document.latest_version.pk} + ) + + def _request_all_test_document_version_signature_verify_view(self): + return self.post( + viewname='signatures:all_document_version_signature_verify' + ) 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 5f2b4678c3..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_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, @@ -15,10 +14,12 @@ from ..permissions import ( permission_document_version_signature_view ) from .literals import TEST_SIGNED_DOCUMENT_PATH -from .mixins import SignaturesTestMixin +from .mixins import SignatureTestMixin -class DocumentSignatureLinksTestCase(SignaturesTestMixin, GenericDocumentViewTestCase): +class DocumentSignatureLinksTestCase( + SignatureTestMixin, GenericDocumentViewTestCase +): def test_document_version_signature_detail_link_no_permission(self): self.test_document_path = TEST_SIGNED_DOCUMENT_PATH self.upload_document() @@ -55,12 +56,14 @@ class DocumentSignatureLinksTestCase(SignaturesTestMixin, GenericDocumentViewTes 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, + } ) ) def test_document_version_signature_delete_link_no_permission(self): - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -75,7 +78,7 @@ class DocumentSignatureLinksTestCase(SignaturesTestMixin, GenericDocumentViewTes self.assertEqual(resolved_link, None) def test_document_version_signature_delete_link_with_permission(self): - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -97,6 +100,8 @@ class DocumentSignatureLinksTestCase(SignaturesTestMixin, GenericDocumentViewTes 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 957b87a159..8930e896f6 100644 --- a/mayan/apps/document_signatures/tests/test_models.py +++ b/mayan/apps/document_signatures/tests/test_models.py @@ -3,23 +3,24 @@ from __future__ import unicode_literals import hashlib import time -from mayan.apps.django_gpg.models import Key -from mayan.apps.django_gpg.tests.literals import ( - TEST_KEY_DATA, TEST_KEY_PASSPHRASE -) +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 +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 from ..tasks import task_verify_missing_embedded_signature -from .literals import TEST_SIGNED_DOCUMENT_PATH, TEST_KEY_ID, TEST_SIGNATURE_ID -from .mixins import SignaturesTestMixin +from .literals import ( + TEST_SIGNED_DOCUMENT_PATH, TEST_KEY_PUBLIC_ID, TEST_SIGNATURE_ID +) +from .mixins import SignatureTestMixin -class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): +class DocumentSignaturesTestCase(SignatureTestMixin, GenericDocumentTestCase): auto_upload_document = False def test_embedded_signature_no_key(self): @@ -32,7 +33,7 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual( signature.document_version, self.test_document.latest_version ) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(signature.signature_id, None) def test_embedded_signature_post_key_verify(self): @@ -45,17 +46,17 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual( signature.document_version, self.test_document.latest_version ) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(signature.signature_id, None) - self._create_test_key() + self._create_test_key_public() signature = EmbeddedSignature.objects.first() self.assertEqual(signature.signature_id, TEST_SIGNATURE_ID) def test_embedded_signature_post_no_key_verify(self): - self._create_test_key() + self._create_test_key_public() self.test_document_path = TEST_SIGNED_DOCUMENT_PATH self.upload_document() @@ -66,17 +67,17 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.assertEqual( signature.document_version, self.test_document.latest_version ) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(signature.signature_id, TEST_SIGNATURE_ID) - self.test_key.delete() + self.test_key_public.delete() signature = EmbeddedSignature.objects.first() self.assertEqual(signature.signature_id, None) def test_embedded_signature_with_key(self): - self._create_test_key() + self._create_test_key_public() self.test_document_path = TEST_SIGNED_DOCUMENT_PATH self.upload_document() @@ -88,14 +89,14 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): signature.document_version, self.test_document.latest_version ) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual( - signature.public_key_fingerprint, self.test_key.fingerprint + signature.public_key_fingerprint, self.test_key_public.fingerprint ) self.assertEqual(signature.signature_id, TEST_SIGNATURE_ID) def test_detached_signature_no_key(self): - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -103,13 +104,14 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, 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_ID) + self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(self.test_signature.public_key_fingerprint, None) def test_detached_signature_with_key(self): - self._create_test_key() + self._create_test_key_public() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -118,12 +120,13 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, 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_ID) + self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual( self.test_signature.public_key_fingerprint, - self.test_key.fingerprint + self.test_key_public.fingerprint ) def test_detached_signature_post_key_verify(self): @@ -138,19 +141,19 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.test_signature.document_version, self.test_document.latest_version ) - self.assertEqual(self.test_signature.key_id, TEST_KEY_ID) + self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual(self.test_signature.public_key_fingerprint, None) - self._create_test_key() + self._create_test_key_public() signature = DetachedSignature.objects.first() self.assertEqual( - signature.public_key_fingerprint, self.test_key.fingerprint + signature.public_key_fingerprint, self.test_key_public.fingerprint ) def test_detached_signature_post_no_key_verify(self): - self._create_test_key() + self._create_test_key_public() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -162,26 +165,26 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): self.test_signature.document_version, self.test_document.latest_version ) - self.assertEqual(self.test_signature.key_id, TEST_KEY_ID) + self.assertEqual(self.test_signature.key_id, TEST_KEY_PUBLIC_ID) self.assertEqual( self.test_signature.public_key_fingerprint, - self.test_key.fingerprint + self.test_key_public.fingerprint ) - self.test_key.delete() + self.test_key_public.delete() signature = DetachedSignature.objects.first() self.assertEqual(signature.public_key_fingerprint, None) def test_document_no_signature(self): - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self.assertEqual(EmbeddedSignature.objects.count(), 0) def test_new_signed_version(self): - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() with open(TEST_SIGNED_DOCUMENT_PATH, mode='rb') as file_object: @@ -199,17 +202,17 @@ class DocumentSignaturesTestCase(SignaturesTestMixin, GenericDocumentTestCase): signature = EmbeddedSignature.objects.first() self.assertEqual(signature.document_version, signed_version) - self.assertEqual(signature.key_id, TEST_KEY_ID) + self.assertEqual(signature.key_id, TEST_KEY_PUBLIC_ID) -class EmbeddedSignaturesTestCase(GenericDocumentTestCase): +class EmbeddedSignaturesTestCase(KeyTestMixin, GenericDocumentTestCase): auto_upload_document = False def test_unsigned_document_version_method(self): TEST_UNSIGNED_DOCUMENT_COUNT = 2 TEST_SIGNED_DOCUMENT_COUNT = 2 - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH for count in range(TEST_UNSIGNED_DOCUMENT_COUNT): self.upload_document() @@ -233,7 +236,7 @@ class EmbeddedSignaturesTestCase(GenericDocumentTestCase): TEST_UNSIGNED_DOCUMENT_COUNT = 2 TEST_SIGNED_DOCUMENT_COUNT = 2 - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH for count in range(TEST_UNSIGNED_DOCUMENT_COUNT): self.upload_document() @@ -256,7 +259,7 @@ class EmbeddedSignaturesTestCase(GenericDocumentTestCase): ) def test_signing(self): - self.test_key = Key.objects.create(key_data=TEST_KEY_DATA) + self._create_test_key_private() self.test_document_path = TEST_DOCUMENT_PATH self.upload_document() @@ -267,15 +270,15 @@ class EmbeddedSignaturesTestCase(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, - passphrase=TEST_KEY_PASSPHRASE + key=self.test_key_private, + passphrase=TEST_KEY_PRIVATE_PASSPHRASE ) 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..aeeaaa500f --- /dev/null +++ b/mayan/apps/document_signatures/tests/test_setting_migrations.py @@ -0,0 +1,35 @@ +from __future__ import unicode_literals + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.smart_settings.tests.mixins import SmartSettingTestMixin + +from ..settings import setting_storage_backend_arguments + + +class DocumentSignaturesSettingMigrationTestCase( + SmartSettingTestMixin, BaseTestCase +): + def test_signatures_storage_backend_arguments_0001_migration(self): + test_value = {'location': 'test value'} + self.test_setting = setting_storage_backend_arguments + self.test_config_value = '{}'.format( + Setting.serialize_value(value=test_value) + ) + self._create_test_config_file() + + self.assertEqual( + setting_storage_backend_arguments.value, + test_value + ) + + def test_signatures_storage_backend_arguments_0001_migration_with_dict(self): + test_value = {'location': 'test value'} + self.test_setting = setting_storage_backend_arguments + self.test_config_value = test_value + self._create_test_config_file() + + 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 07c75aa6dd..7beabc7130 100644 --- a/mayan/apps/document_signatures/tests/test_views.py +++ b/mayan/apps/document_signatures/tests/test_views.py @@ -1,14 +1,17 @@ from __future__ import absolute_import, unicode_literals -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 +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 from ..permissions import ( + permission_document_version_sign_detached, + permission_document_version_sign_embedded, permission_document_version_signature_delete, permission_document_version_signature_download, permission_document_version_signature_upload, @@ -16,61 +19,23 @@ from ..permissions import ( permission_document_version_signature_view ) -from .literals import TEST_SIGNATURE_FILE_PATH, TEST_SIGNED_DOCUMENT_PATH -from .mixins import SignaturesTestMixin +from .literals import TEST_SIGNED_DOCUMENT_PATH +from .mixins import ( + DetachedSignatureViewTestMixin, EmbeddedSignatureViewTestMixin, + SignatureTestMixin, SignatureViewTestMixin +) TEST_UNSIGNED_DOCUMENT_COUNT = 4 TEST_SIGNED_DOCUMENT_COUNT = 2 -class SignaturesViewTestMixin(object): - def _request_test_document_version_signature_delete_view(self): - return self.post( - viewname='signatures:document_version_signature_delete', - kwargs={'pk': self.test_signature.pk} - ) - - def _request_test_document_version_signature_details_view(self): - return self.get( - viewname='signatures:document_version_signature_details', - kwargs={'pk': self.test_signature.pk} - ) - - def _request_test_document_version_signature_download_view(self): - return self.get( - viewname='signatures:document_version_signature_download', - kwargs={'pk': self.test_signature.pk} - ) - - def _request_test_document_version_signature_list_view(self, document): - return self.get( - viewname='signatures:document_version_signature_list', - kwargs={'pk': self.test_document.latest_version.pk} - ) - - def _request_test_document_version_signature_upload_view(self): - with open(TEST_SIGNATURE_FILE_PATH, mode='rb') as file_object: - return self.post( - viewname='signatures:document_version_signature_upload', - kwargs={'pk': self.test_document.latest_version.pk}, - data={'signature_file': file_object} - ) - - def _request_all_test_document_version_signature_verify_view(self): - return self.post( - viewname='signatures:all_document_version_signature_verify' - ) - - class SignaturesViewTestCase( - SignaturesTestMixin, SignaturesViewTestMixin, GenericDocumentViewTestCase + SignatureTestMixin, SignatureViewTestMixin, GenericDocumentViewTestCase ): auto_upload_document = False def test_signature_delete_view_no_permission(self): - self._create_test_key() - - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -85,9 +50,7 @@ class SignaturesViewTestCase( self.assertEqual(DetachedSignature.objects.count(), 1) def test_signature_delete_view_with_access(self): - self._create_test_key() - - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -106,9 +69,7 @@ class SignaturesViewTestCase( self.assertEqual(DetachedSignature.objects.count(), 0) def test_signature_detail_view_no_permission(self): - self._create_test_key() - - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -117,9 +78,7 @@ class SignaturesViewTestCase( self.assertEqual(response.status_code, 404) def test_signature_detail_view_with_access(self): - self._create_test_key() - - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -135,39 +94,8 @@ class SignaturesViewTestCase( status_code=200 ) - def test_signature_download_view_no_permission(self): - self.test_document_path = TEST_DOCUMENT_PATH - self.upload_document() - - self._create_test_detached_signature() - - response = self._request_test_document_version_signature_download_view() - self.assertEqual(response.status_code, 403) - - def test_signature_download_view_with_access(self): - self.test_document_path = TEST_DOCUMENT_PATH - self.upload_document() - - self._create_test_detached_signature() - - self.grant_access( - obj=self.test_document, - permission=permission_document_version_signature_download - ) - - self.expected_content_type = 'application/octet-stream; charset=utf-8' - - response = self._request_test_document_version_signature_download_view() - - with self.test_signature.signature_file as file_object: - assert_download_response( - self, response=response, content=file_object.read(), - ) - def test_signature_list_view_no_permission(self): - self._create_test_key() - - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -175,12 +103,10 @@ 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._create_test_key() - - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH self.upload_document() self._create_test_detached_signature() @@ -196,29 +122,6 @@ class SignaturesViewTestCase( self.assertEqual(response.status_code, 200) self.assertEqual(response.context['object_list'].count(), 1) - def test_signature_upload_view_no_permission(self): - self.test_document_path = TEST_DOCUMENT_PATH - self.upload_document() - - response = self._request_test_document_version_signature_upload_view() - self.assertEqual(response.status_code, 403) - - self.assertEqual(DetachedSignature.objects.count(), 0) - - def test_signature_upload_view_with_access(self): - self.test_document_path = TEST_DOCUMENT_PATH - self.upload_document() - - self.grant_access( - obj=self.test_document, - permission=permission_document_version_signature_upload - ) - - response = self._request_test_document_version_signature_upload_view() - self.assertEqual(response.status_code, 302) - - self.assertEqual(DetachedSignature.objects.count(), 1) - def test_missing_signature_verify_view_no_permission(self): # Silence converter logging self._silence_logger(name='mayan.apps.converter.backends') @@ -229,7 +132,7 @@ class SignaturesViewTestCase( old_hooks = DocumentVersion._post_save_hooks DocumentVersion._post_save_hooks = {} - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH for count in range(TEST_UNSIGNED_DOCUMENT_COUNT): self.upload_document() @@ -262,7 +165,7 @@ class SignaturesViewTestCase( old_hooks = DocumentVersion._post_save_hooks DocumentVersion._post_save_hooks = {} - self.test_document_path = TEST_DOCUMENT_PATH + self.test_document_path = TEST_SMALL_DOCUMENT_PATH for count in range(TEST_UNSIGNED_DOCUMENT_COUNT): self.upload_document() @@ -288,3 +191,227 @@ class SignaturesViewTestCase( EmbeddedSignature.objects.unsigned_document_versions().count(), TEST_UNSIGNED_DOCUMENT_COUNT ) + + +class DetachedSignaturesViewTestCase( + KeyTestMixin, SignatureTestMixin, DetachedSignatureViewTestMixin, + GenericDocumentViewTestCase +): + auto_upload_document = False + + def test_detached_signature_create_view_with_no_permission(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_detached_signature_create_view_with_document_access(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + 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_version_signature_create_view() + self.assertEqual(response.status_code, 200) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_detached_signature_create_view_with_key_access(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + 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_version_signature_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_detached_signature_create_view_with_full_access(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + 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_version_signature_create_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + 1 + ) + + def test_signature_download_view_no_permission(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + self.upload_document() + + self._create_test_detached_signature() + + response = self._request_test_document_version_signature_download_view() + self.assertEqual(response.status_code, 404) + + def test_signature_download_view_with_access(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + self.upload_document() + + self._create_test_detached_signature() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_signature_download + ) + + self.expected_content_types = ('application/octet-stream',) + + response = self._request_test_document_version_signature_download_view() + + with self.test_signature.signature_file as file_object: + self.assert_download_response( + response=response, content=file_object.read(), + ) + + def test_signature_upload_view_no_permission(self): + self.test_document_path = TEST_DOCUMENT_PATH + + self.upload_document() + + response = self._request_test_document_version_signature_upload_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual(DetachedSignature.objects.count(), 0) + + def test_signature_upload_view_with_access(self): + self.test_document_path = TEST_DOCUMENT_PATH + self.upload_document() + + self.grant_access( + obj=self.test_document, + permission=permission_document_version_signature_upload + ) + + response = self._request_test_document_version_signature_upload_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual(DetachedSignature.objects.count(), 1) + + +class EmbeddedSignaturesViewTestCase( + KeyTestMixin, EmbeddedSignatureViewTestMixin, GenericDocumentViewTestCase +): + auto_upload_document = False + + def test_embedded_signature_create_view_with_no_permission(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + self.upload_document() + self._create_test_key_private() + + signatures = self.test_document.latest_version.signatures.count() + + response = self._request_test_document_version_signature_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_embedded_signature_create_view_with_document_access(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + 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_version_signature_create_view() + self.assertEqual(response.status_code, 200) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_embedded_signature_create_view_with_key_access(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + 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_version_signature_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + ) + + def test_embedded_signature_create_view_with_full_access(self): + self.test_document_path = TEST_SMALL_DOCUMENT_PATH + 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_version_signature_create_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual( + self.test_document.latest_version.signatures.count(), + signatures + 1 + ) 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..21d1adc1f7 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(), @@ -269,28 +254,18 @@ class DocumentVersionSignatureDownloadView(SingleObjectDownloadView): model = DetachedSignature object_permission = permission_document_version_signature_download - def get_file(self): - signature = self.get_object() + def get_download_file_object(self): + return self.object.signature_file - return DocumentVersionSignatureDownloadView.VirtualFile( - signature.signature_file, name=force_text(signature) - ) + def get_download_filename(self): + return force_text(self.object) -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 +281,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 84625d9072..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 @@ -23,34 +23,38 @@ from mayan.apps.navigation.classes import SourceColumn from .classes import DocumentStateHelper, WorkflowAction from .events import event_workflow_edited -from .dependencies import * # NOQA 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): @@ -86,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' ) @@ -128,6 +133,10 @@ class DocumentStatesApp(MayanAppConfig): permission_workflow_view, ) ) + ModelPermission.register( + model=WorkflowTransition, + permissions=(permission_workflow_transition,) + ) ModelPermission.register_inheritance( model=WorkflowInstance, related='workflow', @@ -136,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', ) @@ -150,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', @@ -158,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 @@ -201,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( @@ -254,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, @@ -313,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( @@ -333,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', @@ -367,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..a43ac43119 100644 --- a/mayan/apps/document_states/forms.py +++ b/mayan/apps/document_states/forms.py @@ -12,14 +12,17 @@ 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): - klass = forms.ChoiceField(choices=(), label=_('Action')) + klass = forms.ChoiceField( + choices=(), help_text=_('The action type for this action entry.'), + label=_('Action') + ) def __init__(self, *args, **kwargs): super(WorkflowActionSelectionForm, self).__init__(*args, **kwargs) @@ -165,32 +168,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 3d23efec95..681123a425 100644 --- a/mayan/apps/document_states/links.py +++ b/mayan/apps/document_states/links.py @@ -4,6 +4,7 @@ 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 from .permissions import ( permission_workflow_create, permission_workflow_delete, @@ -11,180 +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( - icon_class_path='mayan.apps.document_states.icons.icon_workflow_runtime_proxy_list', - permissions=(permission_workflow_view,), - text=_('Workflows'), view='document_states:workflow_list' + 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_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 73cc1592d7..9bf92ea11d 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 d453e54081..c95e231038 100644 --- a/mayan/apps/document_states/locale/ar/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "لا شيء" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "مستخدم" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "Additional details" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "تعليق" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +msgid "Type" +msgstr "النوع" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "الوثائق" + +#: error_logs.py:8 models.py:378 msgid "Workflow state actions" msgstr "" @@ -91,250 +100,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "العنوان" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "مفعل" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "لا" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "نعم" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "حذف" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "تحرير" -#: links.py:66 -msgid "Actions" -msgstr "الإجراءات" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "الإجراءات" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" msgstr "" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "" + +#: models.py:294 +msgid "Workflow states" +msgstr "" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" -msgstr "Event type" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Event type" + +#: models.py:529 msgid "Document" msgstr "" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "تعليق" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -370,6 +484,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 "" @@ -408,318 +530,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:21 -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\"." @@ -727,19 +917,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" @@ -748,21 +940,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 d86d7478eb..8eff2298e0 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 b5cf660a31..9615401976 100644 --- a/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/bg/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-16 20:54+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" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,752 +18,978 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" -msgstr "" +msgstr "Работни потоци" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" -msgstr "" +msgstr "Текущо състояние на работен поток" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" -msgstr "" +msgstr "Информирай за текущото състояние на избрания работен поток" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" -msgstr "" +msgstr "Информирай за стойността на завършване на текущото състояние на избрания работен поток" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Няма" -#: apps.py:170 +#: apps.py:178 msgid "Current state" -msgstr "" +msgstr "Сегашно състояние" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Потребител" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" -msgstr "" +msgstr "Последен преход" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" -msgstr "" +msgstr "Дата и час" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" -msgstr "" +msgstr "Завършване" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "Допълнителни детайли" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Коментар" - -#: apps.py:231 +#: apps.py:252 msgid "When?" -msgstr "" +msgstr "Кога?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" -msgstr "" +msgstr "Тип на действието" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" -msgstr "" +msgstr "Тригери" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +msgid "Type" +msgstr "Тип" + +#: apps.py:294 +msgid "Widget" +msgstr "Управляващ елемент" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Документи" + +#: error_logs.py:8 models.py:378 msgid "Workflow state actions" -msgstr "" +msgstr "Действия за състояние на работния поток" #: events.py:12 msgid "Workflow created" -msgstr "" +msgstr "Работният поток е създаден" #: events.py:15 msgid "Workflow edited" -msgstr "" +msgstr "Работният поток е редактиран" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "Тип действие за този запис." + +#: forms.py:24 msgid "Action" -msgstr "" +msgstr "Действие" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" -msgstr "" +msgstr "Именно пространство" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" -msgstr "" +msgstr "Етикет" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" -msgstr "" +msgstr "Активиран" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Не" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Да" #: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "" +msgid "Select a transition to execute in the next step." +msgstr "Изберете преход за изпълнение на следващ етап." -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "Преход" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "Изображения на работния процес" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" -msgstr "" +msgstr "Задействане на събитието: %s" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" -msgstr "" +msgstr "Създайте работен поток" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" -msgstr "" +msgstr "Изтрийте" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" -msgstr "" +msgstr "Типове документи" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Редактиране" -#: links.py:66 +#: links.py:56 +msgid "Preview" +msgstr "Предварителен преглед" + +#: links.py:78 msgid "Actions" msgstr "Действия" -#: links.py:72 +#: links.py:84 msgid "Create action" -msgstr "" +msgstr "Създайте действие" -#: links.py:78 +#: links.py:93 msgid "Create state" -msgstr "" +msgstr "Създаване на състояние" -#: links.py:97 links.py:189 +#: links.py:112 links.py:228 msgid "States" -msgstr "" +msgstr "Състояния" -#: links.py:103 +#: links.py:121 msgid "Create transition" -msgstr "" +msgstr "Създаване на преход" -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 +#: links.py:141 msgid "Transition triggers" -msgstr "" +msgstr "Тригери на прехода" -#: links.py:136 -msgid "Preview" -msgstr "" - -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -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 "" +msgstr "Подробности" -#: links.py:170 +#: links.py:207 msgid "Workflow documents" -msgstr "" +msgstr "Документи в работния поток" -#: links.py:182 +#: links.py:221 msgid "State documents" -msgstr "" +msgstr "Документи в състоянието" -#: literals.py:9 -msgid "On entry" -msgstr "" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Стартирайте всички работни потоци" #: literals.py:10 -msgid "On exit" -msgstr "" +msgid "Character" +msgstr "Знак" -#: models.py:42 +#: 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:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." -msgstr "" +msgstr "Тази стойност ще бъде използвана от други приложения за препратка към този работен поток. Може да съдържа само букви, цифри и подчертавания." -#: models.py:45 +#: models.py:55 models.py:460 msgid "Internal name" -msgstr "" +msgstr "Вътрешно име" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "Кратък текст за описание на работния поток." + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" -msgstr "" +msgstr "Работен поток" -#: models.py:74 +#: models.py:147 msgid "Initial state" -msgstr "" +msgstr "Начално състояние" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" -msgstr "" +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "Кратък текст за описание на състоянието на работния поток." #: models.py:279 -msgid "A simple identifier for this action." -msgstr "" +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "Състоянието, в което ще започне работният процес. Само едно състояние може да бъде първоначално състояние." -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "" +#: models.py:281 +msgid "Initial" +msgstr "Начално" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "Процентът на завършеност, който това състояние представлява по отношение на работния процес. Използвайте числа без знака за процент." + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "Състояние на работния поток" + +#: models.py:294 +msgid "Workflow states" +msgstr "Състояния на работния поток" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "Кратък текст, описващ действието." + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "В кой момент на състоянието ще се извърши това действие." + +#: models.py:363 msgid "When" -msgstr "" +msgstr "Кога" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." -msgstr "" +msgstr "Пунктираният Python път към класа на действието на работния поток, който трябва да се изпълни." -#: models.py:292 +#: models.py:368 msgid "Entry action path" -msgstr "" +msgstr "Входна пътека за действие" -#: models.py:295 +#: models.py:371 msgid "Entry action data" -msgstr "" +msgstr "Входни данни за действия" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" -msgstr "" +msgstr "Действие на състояние на работния поток" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "Неизвестен тип действие" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "Кратък текст за описание на прехода." + +#: models.py:428 msgid "Origin state" -msgstr "" +msgstr "Състояние на изхода" -#: models.py:350 +#: models.py:432 msgid "Destination state" -msgstr "" +msgstr "Състояние на местоназначението" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" -msgstr "" +msgstr "Преход на работния поток" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" -msgstr "" +msgstr "Преходи на работния поток" -#: models.py:373 +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "Името, което ще се използва за идентифициране на това поле в други части на системата на работния процес." + +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "Името на полето, което ще бъде показано в потребителския интерфейс." + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "Незадължително съобщение, което ще помогне на потребителите да разберат по-добре целта на полето и данните, които да предоставят." + +#: models.py:470 +msgid "Help text" +msgstr "Помощен текст" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "Дали това поле трябва да бъде попълнено или не, за да продължите." + +#: models.py:475 +msgid "Required" +msgstr "Задължително" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "Незадължителен клас за промяна на представянето по подразбиране на полето." + +#: models.py:480 +msgid "Widget class" +msgstr "Клас на управляващ елемент" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "Група от ключови аргументи за персонализиране на управляващия елемент. Използвайте YAML формат." + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "Аргументи на ключови думи на управляващия елемент" + +#: models.py:492 models.py:514 +msgid "Workflow transition trigger event" +msgstr "Събитие задействащо прехода на работния поток" + +#: models.py:493 models.py:515 +msgid "Workflow transitions trigger events" +msgstr "Събития задействащи прехода на работния поток" + +#: models.py:510 msgid "Event type" msgstr "Тип на събитието" -#: models.py:377 -msgid "Workflow transition trigger event" -msgstr "" - -#: models.py:378 -msgid "Workflow transitions trigger events" -msgstr "" - -#: models.py:392 +#: models.py:529 msgid "Document" -msgstr "" +msgstr "Документ" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "Контекст" + +#: models.py:538 models.py:666 msgid "Workflow instance" -msgstr "" +msgstr "Копие на работния поток" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" -msgstr "" +msgstr "Копия на работния поток" -#: models.py:506 +#: models.py:669 msgid "Datetime" -msgstr "" +msgstr "Дата и час" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Коментар" + +#: models.py:680 +msgid "Extra data" +msgstr "Допълнителни данни" + +#: models.py:684 msgid "Workflow instance log entry" -msgstr "" +msgstr "Запис в дневника на работния поток" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" -msgstr "" +msgstr "Записи в дневника на работния поток" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." -msgstr "" +msgstr "Не е валиден избор на преход." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" -msgstr "" +msgstr "Прокси за изпълнение на работния поток" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" -msgstr "" +msgstr "Прокси сървъри за изпълнение на работния поток" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" -msgstr "" +msgstr "Прокси сървър за състояние на работния поток" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" -msgstr "" +msgstr "Прокси сървъри за състояние на работния поток" #: permissions.py:8 msgid "Document workflows" -msgstr "" +msgstr "Работни потоци за документа" #: permissions.py:12 msgid "Create workflows" -msgstr "" +msgstr "Създайте работни потоци" #: permissions.py:15 msgid "Delete workflows" -msgstr "" +msgstr "Изтрийте работни потоци" #: permissions.py:18 msgid "Edit workflows" -msgstr "" +msgstr "Редактирайте работни потоци" #: permissions.py:21 msgid "View workflows" -msgstr "" +msgstr "Вижте работни потоци" #: permissions.py:27 msgid "Transition workflows" -msgstr "" +msgstr "Работни потоци на прехода" #: permissions.py:30 msgid "Execute workflow tools" -msgstr "" +msgstr "Изпълнете инструменти за работния поток" #: queues.py:9 msgid "Document states" -msgstr "" +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 "" +msgstr "Основен ключ на типа документ, който трябва да се добави." #: serializers.py:37 msgid "" "API URL pointing to a document type in relation to the workflow to which it " "is attached. This URL is different than the canonical document type URL." -msgstr "" +msgstr "URL адрес на API, сочещ тип документ във връзка с работния поток, към който е прикачен. Този URL адрес е различен от основния URL адрес на типа документ." #: serializers.py:116 msgid "Primary key of the destination state to be added." -msgstr "" +msgstr "Основен ключ на състоянието на предназначение, което трябва да се добави." #: serializers.py:120 msgid "Primary key of the origin state to be added." -msgstr "" +msgstr "Основен ключ на първоначалното състояние, което трябва да се добави." #: serializers.py:218 msgid "" "API URL pointing to a workflow in relation to the document to which it is " "attached. This URL is different than the canonical workflow URL." -msgstr "" +msgstr "URL адрес на API, сочещ към работен поток във връзка с документа, към който е прикачен. Този URL адрес е различен от основния URL на работния поток." #: serializers.py:227 msgid "A link to the entire history of this workflow." -msgstr "" +msgstr "Връзка към цялата история на този работен поток." #: serializers.py:259 msgid "" "Comma separated list of document type primary keys to which this workflow " "will be attached." -msgstr "" +msgstr "Разделен със запетаи списък на основни ключове за типа документ, към които ще бъде приложен този работен поток." #: serializers.py:319 msgid "Primary key of the transition to be added." -msgstr "" +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 "" +msgstr "Задайте работни потоци към типа на документа, за да може този документ да изпълнява тези работни потоци." -#: views/workflow_instance_views.py:48 +#: views/workflow_instance_views.py:47 msgid "There are no workflow for this document" -msgstr "" +msgstr "За този документ няма работен поток" -#: views/workflow_instance_views.py:52 +#: views/workflow_instance_views.py:51 #, python-format msgid "Workflows for document: %s" -msgstr "" +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 "" +msgstr "Този изглед ще покаже промените в състоянието при преминаване на инстанция на работен поток." -#: views/workflow_instance_views.py:87 +#: views/workflow_instance_views.py:86 msgid "There are no details for this workflow instance" -msgstr "" +msgstr "Няма подробности за това копие на работния поток" -#: views/workflow_instance_views.py:90 +#: views/workflow_instance_views.py:89 #, python-format msgid "Detail of workflow: %(workflow)s" -msgstr "" +msgstr "Подробности за работния поток: %(workflow)s" -#: views/workflow_instance_views.py:114 +#: views/workflow_instance_views.py:116 #, python-format msgid "Document \"%s\" transitioned successfully" -msgstr "" +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 "" +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 "" +msgstr "Свържете работен поток с някои типове документи и документи от тези типове ще бъдат изброени в този изглед." -#: views/workflow_proxy_views.py:50 +#: views/workflow_proxy_views.py:39 msgid "There are no documents executing this workflow" -msgstr "" +msgstr "Няма документи, изпълняващи този работен поток" -#: views/workflow_proxy_views.py:53 +#: views/workflow_proxy_views.py:43 #, python-format msgid "Documents with the workflow: %s" -msgstr "" +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 "" +msgstr "Създайте някои работни потоци и ги свържете с тип документ. Тук ще бъдат показани активни работни процеси и документите, за които се изпълняват." -#: views/workflow_proxy_views.py:74 +#: views/workflow_proxy_views.py:65 msgid "There are no workflows" -msgstr "" +msgstr "Няма работни потоци" + +#: views/workflow_proxy_views.py:91 +msgid "There are no documents in this workflow state" +msgstr "В това състояние няма документи" #: views/workflow_proxy_views.py:94 -msgid "There are no documents in this workflow state" -msgstr "" - -#: views/workflow_proxy_views.py:97 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" -msgstr "" +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 "" +msgstr "Създайте състояния и ги свържете с помощта на преходи." -#: views/workflow_proxy_views.py:145 +#: views/workflow_proxy_views.py:125 msgid "This workflow doesn't have any state" -msgstr "" +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 "" +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 "" - -#: views/workflow_views.py:265 +#: views/workflow_template_state_views.py:47 #, python-format msgid "Create a \"%s\" workflow action" -msgstr "" +msgstr "Създайте действие за състояние на работен поток "%s"" -#: views/workflow_views.py:305 +#: views/workflow_template_state_views.py:87 #, python-format msgid "Delete workflow state action: %s" -msgstr "" +msgstr "Изтрийте действие за състояние на работен поток: %s" -#: views/workflow_views.py:328 +#: views/workflow_template_state_views.py:110 #, python-format msgid "Edit workflow state action: %s" -msgstr "" +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 "" +msgstr "Действията за състояние на работен поток са макроси, които се изпълняват, когато документите влизат или напускат състоянието, в което пребивават." -#: views/workflow_views.py:371 +#: views/workflow_template_state_views.py:153 msgid "There are no actions for this workflow state" -msgstr "" +msgstr "За това състояние на работния поток няма действия" -#: views/workflow_views.py:375 +#: views/workflow_template_state_views.py:157 #, python-format msgid "Actions for workflow state: %s" -msgstr "" +msgstr "Действия за състояние на работния поток: %s" -#: views/workflow_views.py:409 +#: views/workflow_template_state_views.py:191 msgid "New workflow state action selection" -msgstr "" +msgstr "Избор на ново действие за състояние на работен поток" -#: views/workflow_views.py:430 +#: views/workflow_template_state_views.py:209 #, python-format msgid "Create states for workflow: %s" -msgstr "" +msgstr "Създайте състояния за работен поток: %s" -#: views/workflow_views.py:460 +#: views/workflow_template_state_views.py:239 #, python-format msgid "Delete workflow state: %s?" -msgstr "" +msgstr "Изтриване на състояние на работен поток: %s?" -#: views/workflow_views.py:483 +#: views/workflow_template_state_views.py:262 #, python-format msgid "Edit workflow state: %s" -msgstr "" +msgstr "Редактиране на състояние на работен поток: %s" -#: views/workflow_views.py:514 +#: views/workflow_template_state_views.py:293 msgid "This workflow doesn't have any states" -msgstr "" +msgstr "Този работен поток няма състояния" -#: views/workflow_views.py:540 +#: views/workflow_template_transition_views.py:38 #, python-format msgid "Create transitions for workflow: %s" -msgstr "" +msgstr "Създайте преходи за работния поток: %s" -#: views/workflow_views.py:577 +#: views/workflow_template_transition_views.py:75 #, python-format msgid "Delete workflow transition: %s?" -msgstr "" +msgstr "Изтриване на преход на работния поток: %s?" -#: views/workflow_views.py:600 +#: views/workflow_template_transition_views.py:98 #, python-format msgid "Edit workflow transition: %s" -msgstr "" +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 "" +msgstr "Създайте преход и го използвайте за преместване на работен поток от едно състояние в друго." -#: views/workflow_views.py:639 +#: views/workflow_template_transition_views.py:137 msgid "This workflow doesn't have any transitions" -msgstr "" +msgstr "Този работен поток няма преходи" -#: views/workflow_views.py:643 +#: views/workflow_template_transition_views.py:141 #, python-format msgid "Transitions of workflow: %s" -msgstr "" +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 "" +msgstr "Грешка при актуализиране на събитията задействащи прехода на работния поток; %s" -#: views/workflow_views.py:680 +#: views/workflow_template_transition_views.py:178 msgid "Workflow transition trigger events updated successfully" -msgstr "" +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 "" +msgstr "Тригерите са събития, които предизвикват този преход да се изпълни автоматично." -#: views/workflow_views.py:698 +#: views/workflow_template_transition_views.py:196 #, python-format msgid "Workflow transition trigger events for: %s" -msgstr "" +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 "" +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 "" +msgstr "Това ще пусне всички работни потоци, създадени след като вече са качени документи." -#: views/workflow_views.py:748 +#: views/workflow_template_views.py:236 msgid "Workflow launch queued successfully." -msgstr "" +msgstr "Пускането на работния поток е поставено в опашката успешно." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:21 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" -msgstr "" +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 "" +msgstr "Новият етикет, който ще бъде прикачен към документа. Може да бъде низ или шаблон." -#: workflow_actions.py:30 +#: workflow_actions.py:29 msgid "Document description" -msgstr "" +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 "" +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 "" +msgstr "Грешка в шаблона на етикета на документа: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" -msgstr "" +msgstr "Грешка в шаблона за описание на документа: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" -msgstr "" +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\"." " The \"entry_log\" in turn provides the \"workflow_instance\", \"datetime\"," " \"transition\", \"user\", and \"comment\" attributes." -msgstr "" +msgstr "Може да бъде IP адрес, домейн или шаблон. Шаблоните получават запис в дневника на работния поток като част от техния контекст чрез променливата "entry_log". На свой ред „entry_log“ предоставя характеристиките „workflow_instance“, „datetime“, „transition“, „user“ и „comment“." -#: workflow_actions.py:103 +#: workflow_actions.py:102 msgid "Timeout" -msgstr "" +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 "" +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" " 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 "" +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 "" +msgstr "Изпълнете POST заявка" -#: workflow_actions.py:144 +#: workflow_actions.py:193 #, python-format -msgid "URL template error: %s" -msgstr "" +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 "" - -#: workflow_actions.py:164 -#, python-format -msgid "Payload JSON error: %s" -msgstr "" +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 03e5e16904..7678a27866 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 c7f3d32bcf..058b0fde19 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,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Radni tok" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Trenutno stanje toka posla" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Vratite trenutno stanje odabranog toka posla" -#: apps.py:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nijedno" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Trenutna stanje" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Korisnik" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Poslednja tranzicija" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datum i vreme" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Završetak" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Tranzicija" +#: apps.py:229 +msgid "Additional details" +msgstr "Dodatni detalji" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Komentar" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Kada?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Vrsta akcije" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Uzroci" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Akcije stanja rada" @@ -92,250 +101,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Akcija" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Imenovani prostor" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Labela" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Omogućeno" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Ne" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Da" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +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:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Kreirati radni tok" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Obriši" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Tipovi dokumenta" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Urediti" -#: links.py:66 -msgid "Actions" -msgstr "Akcije" - -#: links.py:72 -msgid "Create action" -msgstr "Stvorite akciju" - -#: links.py:78 -msgid "Create state" -msgstr "Kreiraj stanje" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Stanje" - -#: links.py:103 -msgid "Create transition" -msgstr "Kreirajte tranziciju" - -#: links.py:122 -msgid "Transitions" -msgstr "Tranzicije" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Uzroci tranzicije" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Pregled" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Pokrenite sve tokove rada" +#: links.py:78 +msgid "Actions" +msgstr "Akcije" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Dokumenti radnog toka" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Interno ime" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Radni tok" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Početno stanje" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Inicijalno" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Stanje radnog toka" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Stanje Radnog toka" -#: models.py:279 -msgid "A simple identifier for this action." +#: models.py:355 +msgid "A short text describing the 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:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "Kada" -#: models.py:291 +#: models.py:367 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:368 msgid "Entry action path" msgstr "Putanja za ulaznu akciju" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Podaci o ulaznoj akciji" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Stanje akcije radnog toka" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Stanje porekla" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Stanje destinacije" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Prelazak na radni tok" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Prelazak na radni tok" -#: models.py:373 -msgid "Event type" -msgstr "Tip događaja" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Obavezno" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Događaji tranzicije radnog toka" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Događaji tranzicije radnog toka" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Tip događaja" + +#: models.py:529 msgid "Document" msgstr "Dokument" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Primjer posla" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Primeri toka posla" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Datum i vrijeme" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentar" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Unos tragova u procesu toka posla" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Unos tragova u procesu toka posla" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Izbor tranzicije nije validan." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "Vrijeme radnog toka proxy" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "Vrijeme radnog toka proxies" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "Proxy za izvršavanje radnog procesa" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "Radni proksi za izvršavanje posla" @@ -371,6 +485,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." @@ -409,318 +531,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:21 -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\"." @@ -728,19 +918,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" @@ -749,21 +941,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 1c6848be5f..8b9b24f57a 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 6ee3b60097..5997bd0144 100644 --- a/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/cs/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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" @@ -17,752 +18,978 @@ 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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" -msgstr "" +msgstr "Workfows" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" -msgstr "" +msgstr "Aktuální stav workflow" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" -msgstr "" +msgstr "Vrátí aktuální stav vybraného workflow" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" -msgstr "" +msgstr "Vraťte hodnotu dokončení aktuálního stavu vybraného workflow" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" -msgstr "" +msgstr "žádný" -#: apps.py:170 +#: apps.py:178 msgid "Current state" -msgstr "" +msgstr "Aktuální stav" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" -msgstr "" +msgstr "Uživatel" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" -msgstr "" +msgstr "Poslední krok" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" -msgstr "" +msgstr "Datum a čas" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" +msgstr "Dokončení" + +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "" - -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "" - -#: apps.py:231 +#: apps.py:252 msgid "When?" -msgstr "" +msgstr "Když?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" -msgstr "" +msgstr "Typ akce" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" +msgstr "Spouštěče" + +#: apps.py:286 models.py:454 +msgid "Type" +msgstr "Typ" + +#: apps.py:294 +msgid "Widget" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Dokumenty" + +#: error_logs.py:8 models.py:378 msgid "Workflow state actions" -msgstr "" +msgstr "Akce stavu workflow" #: events.py:12 msgid "Workflow created" -msgstr "" +msgstr "workflow byl vytvořen" #: events.py:15 msgid "Workflow edited" +msgstr "workflow upraven" + +#: forms.py:23 +msgid "The action type for this action entry." msgstr "" -#: forms.py:22 +#: forms.py:24 msgid "Action" -msgstr "" +msgstr "Akce" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" -msgstr "" +msgstr "Jmenný prostor" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Označení" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" -msgstr "" +msgstr "Povoleno" -#: forms.py:127 +#: forms.py:130 msgid "No" -msgstr "" +msgstr "Ne" -#: forms.py:128 +#: forms.py:131 msgid "Yes" -msgstr "" +msgstr "Ano" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "Krok" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" -msgstr "" +msgstr "Spouštěč událostí: %s" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" -msgstr "" +msgstr "Vytvořte workflow" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Odstranit" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" -msgstr "" +msgstr "Typy dokumentů" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editovat" -#: links.py:66 -msgid "Actions" -msgstr "" - -#: links.py:72 -msgid "Create action" -msgstr "" +#: links.py:56 +msgid "Preview" +msgstr "Náhled" #: links.py:78 +msgid "Actions" +msgstr "Akce" + +#: links.py:84 +msgid "Create action" +msgstr "Vytvořit akci" + +#: links.py:93 msgid "Create state" -msgstr "" +msgstr "Vytvořit stav" -#: links.py:97 links.py:189 +#: links.py:112 links.py:228 msgid "States" -msgstr "" +msgstr "Stavy" -#: links.py:103 +#: links.py:121 msgid "Create transition" -msgstr "" +msgstr "Vytvořit krok" -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 +#: links.py:141 msgid "Transition triggers" -msgstr "" +msgstr "Spouštěče kroku" -#: links.py:136 -msgid "Preview" -msgstr "" - -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "" +#: 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 "" +msgstr "Detail" -#: links.py:170 +#: links.py:207 msgid "Workflow documents" -msgstr "" +msgstr "Workflow dokumentů" -#: links.py:182 +#: links.py:221 msgid "State documents" -msgstr "" +msgstr "Stav dokumentů" -#: literals.py:9 -msgid "On entry" -msgstr "" +#: links.py:236 queues.py:17 +msgid "Launch all workflows" +msgstr "Spusťte všechny workflow" #: literals.py:10 -msgid "On exit" +msgid "Character" msgstr "" -#: models.py:42 +#: 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:33 +msgid "On exit" +msgstr "Na výstupu" + +#: models.py:52 msgid "" "This value will be used by other apps to reference this workflow. Can only " "contain letters, numbers, and underscores." -msgstr "" +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:460 msgid "Internal name" +msgstr "Vnitřní název" + +#: models.py:58 +msgid "A short text to describe the workflow." msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" -msgstr "" +msgstr "Workflow" -#: models.py:74 +#: models.py:147 msgid "Initial state" -msgstr "" +msgstr "Počáteční stav" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" +msgstr "Počáteční" + +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." msgstr "" -#: models.py:287 +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "Stav workflow" + +#: models.py:294 +msgid "Workflow states" +msgstr "Stavy workflow" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" -msgstr "" +msgstr "Když" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." -msgstr "" +msgstr "Tečkovaná cesta Python ke třídě akcí pracovního postupu, kterou chcete provést." -#: models.py:292 +#: models.py:368 msgid "Entry action path" -msgstr "" +msgstr "Cesta akce vstupu " -#: models.py:295 +#: models.py:371 msgid "Entry action data" -msgstr "" - -#: models.py:301 -msgid "Workflow state action" -msgstr "" - -#: models.py:346 -msgid "Origin state" -msgstr "" - -#: models.py:350 -msgid "Destination state" -msgstr "" - -#: models.py:358 -msgid "Workflow transition" -msgstr "" - -#: models.py:359 -msgid "Workflow transitions" -msgstr "" - -#: models.py:373 -msgid "Event type" -msgstr "" +msgstr "Vstupní data akce " #: models.py:377 +msgid "Workflow state action" +msgstr "Akce stavu workflow" + +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 +msgid "Origin state" +msgstr "Původní stav" + +#: models.py:432 +msgid "Destination state" +msgstr "Cílový stav" + +#: models.py:440 +msgid "Workflow transition" +msgstr "Krok workflow" + +#: models.py:441 +msgid "Workflow transitions" +msgstr "Krokz workflow" + +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" + +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Požadované" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" -msgstr "" +msgstr "Spouštěcí událost kroku workflow" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" -msgstr "" +msgstr "Spouštějí události kroků workflow" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Typ události" + +#: models.py:529 msgid "Document" +msgstr "Dokument" + +#: models.py:532 +msgid "Context" msgstr "" -#: models.py:398 models.py:503 +#: models.py:538 models.py:666 msgid "Workflow instance" -msgstr "" +msgstr "Instance workflow" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" -msgstr "" +msgstr "Instance workflow" -#: models.py:506 +#: models.py:669 msgid "Datetime" +msgstr "Datum, čas" + +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentář" + +#: models.py:680 +msgid "Extra data" msgstr "" -#: models.py:520 +#: models.py:684 msgid "Workflow instance log entry" -msgstr "" +msgstr "Záznam protokolu instance workflow" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" -msgstr "" +msgstr "Položky protokolu instance workflow" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." -msgstr "" +msgstr "Toto není platná volba kroku." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" -msgstr "" +msgstr "Workflow runtime proxy" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" -msgstr "" +msgstr "Workflow runtime proxies" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" -msgstr "" +msgstr "Workflow state runtime proxy" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" -msgstr "" +msgstr "Workflow state runtime proxies" #: permissions.py:8 msgid "Document workflows" -msgstr "" +msgstr "Workflow dokumentů" #: permissions.py:12 msgid "Create workflows" -msgstr "" +msgstr "Vytvářejte workflow" #: permissions.py:15 msgid "Delete workflows" -msgstr "" +msgstr "Odstranit workflow" #: permissions.py:18 msgid "Edit workflows" -msgstr "" +msgstr "Upravit workflow" #: permissions.py:21 msgid "View workflows" -msgstr "" +msgstr "Zobrazit workflow" #: permissions.py:27 msgid "Transition workflows" -msgstr "" +msgstr "Krok workflow" #: permissions.py:30 msgid "Execute workflow tools" -msgstr "" +msgstr "Spusťte nástroje workflow" #: queues.py:9 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 "" +msgstr "Primární klíč typu dokumentu, který se má přidat." #: serializers.py:37 msgid "" "API URL pointing to a document type in relation to the workflow to which it " "is attached. This URL is different than the canonical document type URL." -msgstr "" +msgstr "URL API směřující na typ dokumentu ve vztahu k workflow, ke kterému je připojen. Tato adresa URL je jiná než adresa URL kanonického typu dokumentu." #: serializers.py:116 msgid "Primary key of the destination state to be added." -msgstr "" +msgstr "Primární klíč cílového stavu, který má být přidán." #: serializers.py:120 msgid "Primary key of the origin state to be added." -msgstr "" +msgstr "Primární klíč stavu původu, který se má přidat." #: serializers.py:218 msgid "" "API URL pointing to a workflow in relation to the document to which it is " "attached. This URL is different than the canonical workflow URL." -msgstr "" +msgstr "URL API ukazující na workflow ve vztahu k dokumentu, ke kterému je připojen. Tato adresa URL se liší od kanonické adresy URL pracovního postupu." #: serializers.py:227 msgid "A link to the entire history of this workflow." -msgstr "" +msgstr "Odkaz na celou historii tohoto workflow." #: serializers.py:259 msgid "" "Comma separated list of document type primary keys to which this workflow " "will be attached." -msgstr "" +msgstr "Čárkami oddělený seznam primárních klíčů typu dokumentu, ke kterým bude toto workflow připojeno." #: serializers.py:319 msgid "Primary key of the transition to be added." +msgstr "Primární klíč kroku, který má být přidán." + +#: 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 "" -#: views/workflow_instance_views.py:44 +#: 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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" - -#: views/workflow_instance_views.py:123 -msgid "Submit" -msgstr "" +msgstr "Dokument „%s“ úspěšně přešel na další krok" #: views/workflow_instance_views.py:125 +msgid "Submit" +msgstr "Odeslat" + +#: 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 "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 "" +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 "" +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 "" +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 "" +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 "" +msgstr "Bez workflow" + +#: 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:94 -msgid "There are no documents in this workflow state" -msgstr "" - -#: views/workflow_proxy_views.py:97 #, python-format msgid "Documents in the workflow \"%s\", state \"%s\"" -msgstr "" +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 "" +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 "" +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 "" +msgstr "Stavy 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 "" - -#: 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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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_template_transition_views.py:246 +#, python-format +msgid "Create a field for workflow transition: %s" msgstr "" -#: views/workflow_views.py:737 +#: 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 "" +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 "" +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 "" +msgstr "Spuštění workflow bylo úspěšně zařazeno do fronty." -#: views/workflow_views.py:774 -#, python-format -msgid "Preview of: %s" -msgstr "" - -#: widgets.py:21 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" -msgstr "" +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 "" +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 "" +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:39 +msgid "Modify document properties" msgstr "" -#: workflow_actions.py:40 -msgid "Modify the properties of the document" -msgstr "" - -#: workflow_actions.py:62 +#: workflow_actions.py:61 #, python-format msgid "Document label template error: %s" -msgstr "" +msgstr "Chyba šablony štítku dokumentu: %s" -#: workflow_actions.py:74 +#: workflow_actions.py:73 #, python-format msgid "Document description template error: %s" -msgstr "" +msgstr "Chyba šablony popisu dokumentu: %s" -#: workflow_actions.py:90 +#: workflow_actions.py:89 msgid "URL" -msgstr "" +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\"." " The \"entry_log\" in turn provides the \"workflow_instance\", \"datetime\"," " \"transition\", \"user\", and \"comment\" attributes." -msgstr "" +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 "" +msgstr "Časový limit" #: 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 "" +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" " 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 "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: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:125 +#: 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:193 +#, python-format +msgid "%(field_name)s JSON error: %(exception)s" msgstr "" -#: workflow_actions.py:144 +#: workflow_actions.py:209 #, python-format -msgid "URL template error: %s" -msgstr "" - -#: workflow_actions.py:155 -#, 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/da_DK/LC_MESSAGES/django.mo b/mayan/apps/document_states/locale/da_DK/LC_MESSAGES/django.mo index 933e90a061..d463db4b3f 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 9acc029819..ce47fc20e1 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,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +17,78 @@ msgstr "" "Language: da_DK\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Ingen" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Bruger" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "" @@ -91,250 +100,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Etiket" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Nej" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Ja" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Slet" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Dokumenttyper" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Rediger" -#: links.py:66 -msgid "Actions" -msgstr "" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" msgstr "" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "" + +#: models.py:294 +msgid "Workflow states" +msgstr "" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "" + +#: models.py:529 msgid "Document" msgstr "Dokument" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -370,6 +484,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 "" @@ -408,318 +530,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:21 -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\"." @@ -727,19 +917,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" @@ -748,21 +940,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 09640aa212..e1468af9c2 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 acdf11fea8..a67a5d08d9 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 @@ -5,13 +5,14 @@ # Translators: # Berny , 2015 # Jesaja Everling , 2017 +# Marvin Haschker , 2019 # Mathias Behrle , 2018-2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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" @@ -20,69 +21,78 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Workflows" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Aktueller Status eines Workflows" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Den aktuellen Status des ausgewählten Workflows zurückgeben" -#: apps.py:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Keiner" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Aktueller Status" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Benutzer" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Letzter Übergang" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datum und Zeit" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Fertigstellung" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Übergang" +#: apps.py:229 +msgid "Additional details" +msgstr "Zusätzliche Details" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Kommentar" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Wann" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Aktionstyp" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Trigger" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Statusaktionen von Workflows" @@ -94,250 +104,355 @@ msgstr "Workflow erstellt" msgid "Workflow edited" msgstr "Workflow bearbeitet" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Aktion" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Namensraum" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Bezeichnung" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Aktiviert" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Nein" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Ja" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +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:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Workflow erstellen" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Löschen" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Dokumententypen" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Bearbeiten" -#: links.py:66 -msgid "Actions" -msgstr "Aktionen" - -#: links.py:72 -msgid "Create action" -msgstr "Aktion erstellen" - -#: links.py:78 -msgid "Create state" -msgstr "Status erstellen" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Status" - -#: links.py:103 -msgid "Create transition" -msgstr "Übergang erstellen" - -#: links.py:122 -msgid "Transitions" -msgstr "Übergänge" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Übergangstrigger" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Vorschau" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Alle Workflows starten" +#: links.py:78 +msgid "Actions" +msgstr "Aktionen" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Workflow-Dokumente" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Interner Name" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Workflow" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Initialstatus" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Initial" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Workflow Status" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Workflow Status" -#: models.py:279 -msgid "A simple identifier for this action." -msgstr "Ein einfacher Identifikator für diese Aktion." +#: models.py:355 +msgid "A short text describing the action." +msgstr "" -#: 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:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "Wann" -#: models.py:291 +#: models.py:367 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:368 msgid "Entry action path" msgstr "Pfad der Eingangsaktion" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Daten der Eingangsaktion" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Workflowstatusaktion" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Herkunftsstatus" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Zielstatus" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Workflow Übergang" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Workflow Übergänge" -#: models.py:373 -msgid "Event type" -msgstr "Ereignistyp" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Erforderlich" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Workflowübergangstriggerereignis" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Workflowübergangstriggerereignisse" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Ereignistyp" + +#: models.py:529 msgid "Document" msgstr "Dokument" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Workflow" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Workflows" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Zeit" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Kommentar" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Workflow Logeintrag" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Workflow Logeinträge" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Kein gültiger Übergang." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "Workflow-Laufzeitproxy" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "Workflow-Laufzeit-Proxies" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "Laufzeitproxy für Workflowstatus" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "Runtime-Proxies für Workflowstatus" @@ -373,6 +488,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." @@ -411,318 +534,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 "" +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 "" +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 "" +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 "" - -#: views/workflow_views.py:182 -#, python-format -msgid "Edit workflow: %s" -msgstr "" - -#: 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 "" +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 "" +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 "" +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 "" +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:21 -msgid "Workflow preview" -msgstr "" - -#: workflow_actions.py:22 +#: workflow_actions.py:21 msgid "Document label" -msgstr "" +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 "" +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\"." @@ -730,19 +921,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" @@ -751,21 +944,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 e2cf8d794b..69eeeaf4cb 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 6d0c738f14..6c6278c5c4 100644 --- a/mayan/apps/document_states/locale/el/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +17,78 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Ροές εργασίας" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Τρέχουσα κατάσταση μιας ροής εργασίας" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Επιστέφει την τρέχουσα κατταση της επιλεγμένης ροής εργασίας" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "Επιστρέφει την τιμή ολολήρωσης της τρέχουσας κατάστασης για την επιλεγμένη ροή εργασίας" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Κανένα" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Τρέχουσα κατσταση" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Χρήστης" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Τελευταία μετάβαση" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Ημερομηνία και ώρα" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Ολοκλήρωση" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Μετάβαση" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Σχόλιο" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Πότε;" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Τύπος ενέργειας" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +msgid "Type" +msgstr "Τύπος" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Έγγραφα" + +#: error_logs.py:8 models.py:378 msgid "Workflow state actions" msgstr "Ενέργειες κατάστασης ροής εργασίας" @@ -91,250 +100,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Ενέργεια" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Ετικέτα" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Ενεργοποιημένο" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Όχι" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Ναι" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "Μετάβαση" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "Συμβάν εκκίνησης: %s" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Δημιουργία ροής εργασίας" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Διαγραφή" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Τύποι εγγράφων" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Τροποποίηση" -#: links.py:66 -msgid "Actions" -msgstr "Ενέργειες" - -#: links.py:72 -msgid "Create action" -msgstr "Δημιουργία ενέργειας" - -#: links.py:78 -msgid "Create state" -msgstr "Δημιουργία κατάστασης" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Καταστάσεις" - -#: links.py:103 -msgid "Create transition" -msgstr "Δημιουργία μετάβασης" - -#: links.py:122 -msgid "Transitions" -msgstr "Μεταβάσεις" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Προεπισκόπηση" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Εκκίνηση όλων των ροών εργασίας" +#: links.py:78 +msgid "Actions" +msgstr "Ενέργειες" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Έγγραφα στην ροή εργασίας" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Εσωτερικό όνομα" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Ροή εργασίας" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Αρχική κατάσταση" -#: models.py:203 -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 "Επιλέξτε αν αυτή θα είναι η αρχική κατάσταση της ροής εργασίας. Μόνο μια κατάσταση μπορεί να είναι η αρχική κατάσταση." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Αρχική" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Κατάσταση ροής εργασίας" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Καταστάσεις ροής εργασίας" -#: models.py:279 -msgid "A simple identifier for this action." +#: models.py:355 +msgid "A short text describing the action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "Σε ποιό σημείο αυτής της κατάστασης θα εκτελεστεί αυτή η ενέργεια " +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "Πότε" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Ενέργεια κατάστασης ροής εργασίας" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Κατάσταση προέλευσης" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Κατάσταση προορισμού" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Μετάβαση ροής εργασίας" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Μεταβάσεις ροής εργασίας" -#: models.py:373 -msgid "Event type" -msgstr "Τύπος συμβάντος" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "απαιτείται" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Συμβάν ενεργοποίησης μετάβασης ροής εργασίας" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Συμβάντα ενεργοποίησης μεταβάσεων ροής εργασίας" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Τύπος συμβάντος" + +#: models.py:529 msgid "Document" msgstr "Έγγραφο" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Περιστατικό ροής εργασίας" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Περιστατικά ροής εργασίας" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Ημερομηνία και ώρα" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Σχόλιο" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Εγγραφή ημερολογίου περιστατικού ροής εργασίας" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Εγγραφές ημερολογίου περιστατικών ροής εργασίας" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Άκυρη επιλογή μετάβασης." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -370,6 +484,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 "Πρωτεύον κλειδί του τύπου εγγράφου που θα προστεθεί." @@ -408,318 +530,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:21 -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\"." @@ -727,19 +917,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" @@ -748,21 +940,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 10ddba0a86..9ec05f61e6 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-09-24 23:11-0400\n" +"POT-Creation-Date: 2019-12-18 00:27-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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +msgid "Type" +msgstr "" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "" + +#: error_logs.py:8 models.py:378 msgid "Workflow state actions" msgstr "" @@ -91,250 +100,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "" -#: links.py:66 -msgid "Actions" -msgstr "" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" msgstr "" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "" + +#: models.py:294 +msgid "Workflow states" +msgstr "" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "" + +#: models.py:529 msgid "Document" msgstr "" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -370,6 +484,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 "" @@ -408,316 +530,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:21 -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\". " @@ -725,19 +913,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 " @@ -746,21 +935,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 3eaaf3d8d4..51476ac2e0 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 f00cc60ed9..e7d4047a0e 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 21:05+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 06:52+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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Flujos de trabajo" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Estado actual de un flujo de trabajo" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Devolver el estado actual del flujo de trabajo seleccionado" -#: apps.py:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Ninguno" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Estado actual" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Usuario" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Última transición" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Fecha y hora" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Cantidad de completación" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Transición" +#: apps.py:229 +msgid "Additional details" +msgstr "Detalles adicionales" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Comentario" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "¿Cuando?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Tipo de acción" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Disparadores" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Acciones del estado del flujo de trabajo" @@ -93,250 +102,355 @@ msgstr "Flujo de trabajo creado" msgid "Workflow edited" msgstr "Flujo de trabajo editado" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "El tipo de acción para esta entrada de acción." + +#: forms.py:24 msgid "Action" msgstr "Acción" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Categoría" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Etiqueta" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Habilitado" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "No" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Si" #: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Comentario opcional para adjuntar a la transición." +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:182 links.py:197 models.py:451 models.py:506 models.py:673 +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:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Crear flujo de trabajo" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Borrar" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Tipos de documentos" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editar" -#: links.py:66 -msgid "Actions" -msgstr "Acciones" - -#: links.py:72 -msgid "Create action" -msgstr "Crear acción" - -#: links.py:78 -msgid "Create state" -msgstr "Crear estado" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Estados" - -#: links.py:103 -msgid "Create transition" -msgstr "Crear transición" - -#: links.py:122 -msgid "Transitions" -msgstr "Transiciones" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Disparadores de transición" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Muestra" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Iniciar todos los flujos de trabajo" +#: links.py:78 +msgid "Actions" +msgstr "Acciones" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Documentos del flujo de trabajo" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Nombre interno" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "Un texto breve para describir el flujo de trabajo." + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Flujo de trabajo" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Estado inicial" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "Un texto breve para describir el estado del flujo de trabajo." -#: models.py:205 +#: models.py:279 +msgid "" +"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:281 msgid "Initial" msgstr "Inicial" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Estado de flujo de trabajo" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Estados de flujo de trabajo" -#: models.py:279 -msgid "A simple identifier for this action." -msgstr "Un identificador simple para esta acción." +#: models.py:355 +msgid "A short text describing the action." +msgstr "Un breve texto que describe la 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:362 +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:363 msgid "When" msgstr "Cuando" -#: models.py:291 +#: models.py:367 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:368 msgid "Entry action path" msgstr "Ruta de acceso a la acción" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Datos de la acción" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Acción del estado del flujo de trabajo" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "Tipo de acción desconocido" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "Un breve texto para describir la transición." + +#: models.py:428 msgid "Origin state" msgstr "Estado origen" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Estado destino" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Transición de flujo de trabajo" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Transiciones de flujo de trabajo" -#: models.py:373 -msgid "Event type" -msgstr "Tipo de evento" +#: models.py:458 +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:377 +#: models.py:464 +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:468 +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:470 +msgid "Help text" +msgstr "Texto de ayuda" + +#: models.py:474 +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:475 +msgid "Required" +msgstr "Requerido" + +#: models.py:479 +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:480 +msgid "Widget class" +msgstr "Clase de widget" + +#: models.py:484 +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:487 +msgid "Widget keyword arguments" +msgstr "Argumentos nombrados del widget" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Disparador de transiciones de flujo de trabajo" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Disparadores de transiciones de flujo de trabajo" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Tipo de evento" + +#: models.py:529 msgid "Document" msgstr "Documento" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "Contexto" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Instancia de flujo de trabajo" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Instancias de flujo de trabajo" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Fecha y hora" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Comentario" + +#: models.py:680 +msgid "Extra data" +msgstr "Datos extra" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Entrada de registro de la instancia de flujo de trabajo" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Entradas de registro de las instancias de flujos de trabajo" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "No hay opción valida de transición." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "Proxy de tiempo de ejecución de flujo de trabajo" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "Proxies de tiempo de ejecución de flujo de trabajo" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "Proxy de tiempo de ejecución de estado de flujo de trabajo" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "Proxies de tiempo de ejecución de estado de flujo de trabajo" @@ -372,6 +486,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." @@ -410,318 +532,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 "Selección de nueva acciones de estado de flujo de trabajo" +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 úselo para mover un flujo de trabajo de un estado a otro." +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 desencadenantes son eventos que hacen que esta transición se ejecute automáticamente." +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 activación de transición de flujo de trabajo para: %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:21 -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\"." @@ -729,19 +919,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" @@ -750,21 +942,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 9ec997c9d8..9c557ffeac 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 a17844d8b2..227dbb1b13 100644 --- a/mayan/apps/document_states/locale/fa/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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" @@ -19,69 +19,78 @@ msgstr "" "Language: fa\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "گردش کار" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "وضعیت فعلی جریان کاری" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "وضعیت فعلی جریان کاری انتخاب شده را بازگردانید" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "مقدار تکمیل وضعیت کنونی جریان کاری انتخاب شده را بازگردانید" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "هیچ یک" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "وضعیت فعلی" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "کاربر" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "آخرین گذار" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "تاریخ و زمان" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "تکمیل" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "گذار" +#: apps.py:229 +msgid "Additional details" +msgstr "جزئیات اضافی" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "اظهار نظر" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "چه زمانی؟" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "نوع اقدام" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "راه اندازی" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +msgid "Type" +msgstr "نوع" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "اسناد" + +#: error_logs.py:8 models.py:378 msgid "Workflow state actions" msgstr "اقدامات دولت کار جریان" @@ -93,250 +102,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "عمل" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "فضای نام" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "برچسب" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "فعال شده است" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "نه" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "بله" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +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:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "ایجاد گردش کار" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "حذف" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "نوع سند" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "ویرایش" -#: links.py:66 -msgid "Actions" -msgstr "اقدامات" - -#: links.py:72 -msgid "Create action" -msgstr "اقدام را ایجاد کنید" - -#: links.py:78 -msgid "Create state" -msgstr "ایجاد وضعیت یا حالت" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "و یا وضعیتها حالات States" - -#: links.py:103 -msgid "Create transition" -msgstr "ایجاد گذار" - -#: links.py:122 -msgid "Transitions" -msgstr "گذار" - -#: links.py:129 -msgid "Transition triggers" -msgstr "باعث انتقال می شود" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "پیش نمایش" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "راه اندازی تمام جریانهای کاری" +#: links.py:78 +msgid "Actions" +msgstr "اقدامات" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "اسناد گردش کار" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "نام داخلی" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "گردش کار" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "حالت اولیه" -#: models.py:203 -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 "انتخاب کنید اگر این حالت شما خواهد بود که می خواهید جریان کار شروع شود. تنها یک حالت می تواند وضعیت اولیه باشد." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "اولیه" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "حالت گردش کار" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "وضعیت کار" -#: models.py:279 -msgid "A simple identifier for this action." +#: models.py:355 +msgid "A short text describing the action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "در این لحظه دولت این عمل را اجرا خواهد کرد" +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "چه زمانی" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "مسیر پایتون نقطه به کلاس عملیات گردش کار برای اجرای." -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "Entry action path" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Entry action data" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Workflow state action" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "کشور مبدا" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "حالت مقصد" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "گذار گردش کار" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "گذارهای کاری" -#: models.py:373 -msgid "Event type" -msgstr "نوع رویداد" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "الزامی" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "رویداد رویداد انتقال جریان کاری" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "انتقال گردش کار باعث وقایع می شود" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "نوع رویداد" + +#: models.py:529 msgid "Document" msgstr "سند" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "نمونه گردش کار" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "نمونه کارها" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "زمان قرار" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "اظهار نظر" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "ورودی به لاگ یک مورد از گردش کار" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "ورودیهای لگ یک مورد از گردش کار" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "یک انتخاب منتخب معتبر نیست" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "پروکسی زمانبندی گردش کار" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "پروکسی کارآمد در زمان اجرا" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "پروکسی زمان اجرا وضعیت " -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "پروکسی زمان اجرا وضعیت " @@ -372,6 +486,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 "کلید اولیه نوع سند اضافه می شود" @@ -410,318 +532,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:21 -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 +919,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" @@ -750,21 +942,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 54f76d2e3f..6423c45bde 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 89f99f8533..63abc8c23e 100644 --- a/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/locale/fr/LC_MESSAGES/django.po @@ -6,13 +6,14 @@ # 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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" @@ -21,69 +22,78 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Flux de travail" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "État actuel d'un flux de travail" -#: apps.py:105 +#: 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:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Aucun" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "État actuel" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Utilisateur" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Dernière transition" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Date et heure" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Finalisation" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Transition" +#: apps.py:229 +msgid "Additional details" +msgstr "Détails supplémentaires" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Commentaire" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Quand ?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Type d'action" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Déclencheurs" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Actions d'état du flux de travail" @@ -95,250 +105,355 @@ msgstr "Flux de travail créé" msgid "Workflow edited" msgstr "Flux de travail modifié" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Action" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Espace de nommage" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Libellé" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Activé" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Non" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Oui" #: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Commentaire facultatif à joindre à la transition." +msgid "Select a transition to execute in the next step." +msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +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:23 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:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Supprimer" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Types de document" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Modifier" -#: links.py:66 -msgid "Actions" -msgstr "Actions" - -#: links.py:72 -msgid "Create action" -msgstr "Créer une action" - -#: links.py:78 -msgid "Create state" -msgstr "Créer un état" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "États" - -#: links.py:103 -msgid "Create transition" -msgstr "Créer une transition" - -#: links.py:122 -msgid "Transitions" -msgstr "Transitions" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Déclencheurs de transition" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Prévisualiser" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Lancer tous les flux de travail" +#: links.py:78 +msgid "Actions" +msgstr "Actions" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Documents du flux de travail" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Nom interne" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Flux de travail" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "État initial" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Initial" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "État du flux de travail" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "États du flux de travail" -#: models.py:279 -msgid "A simple identifier for this action." -msgstr "Un identifiant simple pour cette action." +#: models.py:355 +msgid "A short text describing the action." +msgstr "" -#: 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:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "Quand" -#: models.py:291 +#: models.py:367 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:368 msgid "Entry action path" msgstr "Chemin d'action d'entrée" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Données d'action d'entrée" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Action d'état du flux de travail" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "Type d'action inconnu" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "État d'origine" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "État de destination" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Transition du flux de travail" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Transitions du flux de travail" -#: models.py:373 -msgid "Event type" -msgstr "Type d'évènement" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "Texte d'aide" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Requis" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Événement déclencheur de transition du flux de travail" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Événements déclencheurs de transitions du flux de travail" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Type d'évènement" + +#: models.py:529 msgid "Document" msgstr "Document" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Instance du flux de travail" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Instances du flux de travail" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Date et heure" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Commentaire" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Entrée de la journalisation de l'instance du flux de travail" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Entrées de la journalisation du flux de travail" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Choix de transition invalide." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "Proxy d'exécution du flux de travail" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "Proxies d'exécution du flux de travail" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "Protocole d'exécution de l'état du flux de travail" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "Proxies d'exécution de l'état du flux de travail" @@ -374,6 +489,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." @@ -412,318 +535,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:21 -msgid "Workflow preview" -msgstr "" - -#: 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\"." @@ -731,19 +922,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" @@ -752,21 +945,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 ff35605874..e88df0326b 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 8ad1b33701..148a98e6ab 100644 --- a/mayan/apps/document_states/locale/hu/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +18,78 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "a folyamat aktuálus állapota" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Semmi" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Jelen állapot" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Felhasználó" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Dátum és idő" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Megjegyzés" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "" @@ -92,250 +101,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Névtér" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Cimke" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Bekapcsolt" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Nem" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Igen" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Törlés" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Dokumentum típusok" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Szerkesztés" -#: links.py:66 -msgid "Actions" -msgstr "Műveletek" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Előnézet" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Műveletek" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Kezdeti állapot" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" msgstr "" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "" + +#: models.py:294 +msgid "Workflow states" +msgstr "" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" -msgstr "Esemény típus" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Esemény típus" + +#: models.py:529 msgid "Document" msgstr "Dokumentum" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Megjegyzés" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -371,6 +485,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 "" @@ -409,318 +531,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:21 -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\"." @@ -728,19 +918,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" @@ -749,21 +941,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 9f880a6fd5..e9470f3614 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 09149d77d1..c69d96749c 100644 --- a/mayan/apps/document_states/locale/id/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +18,78 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Alur kerja" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Kondisi alur kerja saat ini" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Kembalikan kondisi saat ini ke alur kerja terpilih" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nihil" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Kondisi saat ini" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Pengguna" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Transisi terakhir" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Tanggal dan waktu" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Transisi" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Komentar" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Kapan?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Tipe tindakan" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Pemicu" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Kondisi aksi alur kerja" @@ -92,250 +101,355 @@ msgstr "Alur kerja dibuat" msgid "Workflow edited" msgstr "Alur kerja disunting" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Tindakan" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Label" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Tidak" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Ya" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "Transisi" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Buat alur kerja" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Hapus" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Tipe dokumen" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Sunting" -#: links.py:66 -msgid "Actions" -msgstr "Aksi" - -#: links.py:72 -msgid "Create action" -msgstr "Buat aksi" - -#: links.py:78 -msgid "Create state" -msgstr "Buat kondisi" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Kondisi" - -#: links.py:103 -msgid "Create transition" -msgstr "Buat transisi" - -#: links.py:122 -msgid "Transitions" -msgstr "Transisi" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Pemicu transisi" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Pratinjau" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "" +#: 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:176 +msgid "Fields" +msgstr "" + +#: links.py:186 msgid "Detail" msgstr "Detail" -#: links.py:170 +#: links.py:207 msgid "Workflow documents" msgstr "Dokumen alur kerja" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Nama internal" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Alur kerja" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Kondisi inisiasi" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Inisiasi" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Kondisi alur kerja" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Kondisi alur kerja" -#: models.py:279 -msgid "A simple identifier for this action." +#: models.py:355 +msgid "A short text describing the action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:362 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "Kapan" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Kondisi asli" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Tujuan kondisi" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Transisi alur kerja" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Transisi alur kerja" -#: models.py:373 -msgid "Event type" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "" + +#: models.py:529 msgid "Document" msgstr "Dokumen" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Waktu tanggal" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentar" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Pilihan transisi tidak valid" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -371,6 +485,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" @@ -409,318 +531,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:21 -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\"." @@ -728,19 +918,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" @@ -749,21 +941,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 2e04a3bf7e..5dbca75f87 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 b00dd5e844..28c9866a9d 100644 --- a/mayan/apps/document_states/locale/it/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +19,78 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "I workflow" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Stato corrente del workflow" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "Restituisce lo stato corrente del flusso di lavoro selezionato" -#: apps.py:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nessuna " -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Stato corrente" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Utente" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Ultima transizione" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Data e ora" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Completamento" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Transizione" +#: apps.py:229 +msgid "Additional details" +msgstr "Dettagli aggiuntivi " -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Commento" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Quando?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Tipo di azione" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Triggers (azioni innescate)" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Azioni per lo stato del flusso di lavoro" @@ -93,250 +102,355 @@ msgstr "Flusso di lavoro creato" msgid "Workflow edited" msgstr "Flusso di lavoro modificato" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Azione" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Namespace" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Etichetta" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Abilitato" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "No" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Si" #: forms.py:181 -msgid "Optional comment to attach to the transition." -msgstr "Commento opzionale da aggiungere alla transizione." +msgid "Select a transition to execute in the next step." +msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "Transizione" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Crea workflow" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Cancella" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Tipi di documento" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Modifica" -#: links.py:66 -msgid "Actions" -msgstr "Azioni " - -#: links.py:72 -msgid "Create action" -msgstr "Crea azione" - -#: links.py:78 -msgid "Create state" -msgstr "Crea stato" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Stati" - -#: links.py:103 -msgid "Create transition" -msgstr "Crea transizione" - -#: links.py:122 -msgid "Transitions" -msgstr "Transizioni" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Trigger per la transizione" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Anteprima " -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Avvia tutti i workflow" +#: links.py:78 +msgid "Actions" +msgstr "Azioni " + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Documenti di workflow" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Nome interno" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Workflow" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Stato iniziale" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Iniziale" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Stato workflow" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Stati workflow" -#: models.py:279 -msgid "A simple identifier for this action." -msgstr "Un semplice identificatore per questa azione." +#: models.py:355 +msgid "A short text describing the action." +msgstr "" -#: 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:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "Quando" -#: models.py:291 +#: models.py:367 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:368 msgid "Entry action path" msgstr "Percorso per l'inizio dell'azione" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Dati per l'inizio dell'azione" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Azione dello stato del workflow" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Stato originale" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Stato di destinazione" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Transizione workflow" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Transizioni workflow" -#: models.py:373 -msgid "Event type" -msgstr "Tipo evento" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Obbligatorio" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Evento scatenato dalla transizione del workflow" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Eventi scatenati dalla transizione del workflow" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Tipo evento" + +#: models.py:529 msgid "Document" msgstr "Documento" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Istanza workflow" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Istanze workflow" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Data e ora" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Commento" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Voce log istanza workflow" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Voci log istanza workflow" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Non è una scelta valida per la transizione" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -372,6 +486,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 "" @@ -410,318 +532,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:21 -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 +919,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" @@ -750,21 +942,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 00f28fed56..909ebe04ea 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 c34e07987e..09bd6c0f20 100644 --- a/mayan/apps/document_states/locale/lv/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Darbplūsmas" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Pašreizējais darbplūsmas stāvoklis" -#: apps.py:105 +#: 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:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nav neviens" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Pašreizējais stāvoklis" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Lietotājs" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Pēdējā pāreja" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datums un laiks" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Pabeigšana" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Pāreja" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Komentārs" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Kad?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Darbības veids" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Palaišanas" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Darbplūsmas stāvokļa darbības" @@ -92,250 +101,355 @@ msgstr "Izveidota darbplūsma" msgid "Workflow edited" msgstr "Rediģēta darbplūsma" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Rīcība" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Vārda vieta" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Etiķete" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Iespējots" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Nē" -#: forms.py:128 +#: forms.py:131 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." +msgid "Select a transition to execute in the next step." +msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +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:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Izveidot darbplūsmu" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Dzēst" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Dokumentu veidi" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Rediģēt" -#: links.py:66 -msgid "Actions" -msgstr "Darbības" - -#: links.py:72 -msgid "Create action" -msgstr "Izveidojiet darbību" - -#: links.py:78 -msgid "Create state" -msgstr "Izveidot stāvokli" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Valstīm" - -#: links.py:103 -msgid "Create transition" -msgstr "Izveidot pāreju" - -#: links.py:122 -msgid "Transitions" -msgstr "Pārejas" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Pāreja izraisa" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Priekšskatījums" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Uzsākt visas darbplūsmas" +#: links.py:78 +msgid "Actions" +msgstr "Darbības" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Darbplūsmas dokumenti" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Iekšējais nosaukums" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Darbplūsma" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Sākotnējais stāvoklis" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Sākotnējais" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Darbplūsmas stāvoklis" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Darbplūsmas stāvokļi" -#: models.py:279 -msgid "A simple identifier for this action." -msgstr "Vienkāršs šīs darbības identifikators." +#: models.py:355 +msgid "A short text describing the action." +msgstr "" -#: 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:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "Kad" -#: models.py:291 +#: models.py:367 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:368 msgid "Entry action path" msgstr "Ieejas ceļš" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Ievades darbības dati" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Darbplūsmas stāvokļa darbība" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Izcelsmes valsts" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Galamērķa valsts" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Darbplūsmas pāreja" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Darbplūsmas pārejas" -#: models.py:373 -msgid "Event type" -msgstr "Notikuma veids" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Darbplūsmas pārejas sprūda notikums" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Darbplūsmas pārejas izraisa notikumus" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Notikuma veids" + +#: models.py:529 msgid "Document" msgstr "Dokuments" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Darbplūsmas piemērs" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Darbplūsmas gadījumi" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Datums Laiks" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentārs" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Darbplūsmas gadījumu žurnāla ieraksts" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Darbplūsmas gadījumu žurnāla ieraksti" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Nav derīga pārejas izvēle." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "Darbplūsmas izpildes laiks" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "Darbplūsmas izpildes laiks" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "Darbplūsmas stāvokļa izpildlaika starpniekserveris" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "Darbplūsmas stāvokļa izpildes laiks" @@ -371,6 +485,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." @@ -409,318 +531,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:21 -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\"." @@ -728,19 +918,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" @@ -749,21 +941,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 a9779b33cb..091e49111e 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 b21ded37bf..847d6b5099 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,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +19,78 @@ msgstr "" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Geen" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Huidige staat" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Gebruiker" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Laatste transitie" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Datum en tijd" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Voltooiing" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Transitie" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Commentaar" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Actie type" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "" @@ -93,250 +102,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Actie" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Namespace" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Label" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Ingeschakeld" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Nee" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Ja" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "Transitie" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Verwijder" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Documentsoorten" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "bewerken" -#: links.py:66 -msgid "Actions" -msgstr "Acties" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "Maak staat aan" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Staten" - -#: links.py:103 -msgid "Create transition" -msgstr "Transitie aanmaken" - -#: links.py:122 -msgid "Transitions" -msgstr "Transities" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Preview" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Acties" + +#: links.py:84 +msgid "Create action" msgstr "" +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Workflow" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Initiële staat" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Initieel" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Workflowstaat" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Workflowstaten" -#: models.py:279 -msgid "A simple identifier for this action." +#: models.py:355 +msgid "A short text describing the action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:362 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Originele staat" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Bestemmingsstaat" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Workflowtransitie" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Workflowtransities" -#: models.py:373 -msgid "Event type" -msgstr "Evenementsoort" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Verplicht" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Evenementsoort" + +#: models.py:529 msgid "Document" msgstr "Document" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Workflowinstantie" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Workflowinstanties" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Datumtijd" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Commentaar" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -372,6 +486,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 "" @@ -410,318 +532,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:21 -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 +919,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" @@ -750,21 +942,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 1cfde7821f..87d619e006 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 368dfcdcfc..88ab5ba82d 100644 --- a/mayan/apps/document_states/locale/pl/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Brak" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Aktualny stan" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Użytkownik" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Data i godzina" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "Dodatkowe szczegóły" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Komentarz" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "" @@ -92,250 +101,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Przestrzeń nazw" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Etykieta" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Włączone" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Nie" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Tak" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Usuń" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Typy dokumentu" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Edytuj" -#: links.py:66 -msgid "Actions" -msgstr "Akcje" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "Utwórz stan" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Stany" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Podgląd" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Akcje" + +#: links.py:84 +msgid "Create action" +msgstr "" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Nazwa wewnętrzna" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Obieg dokumentów" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Stan początkowy" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Początkowy" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Stan obiegu" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Stany obiegu" -#: models.py:279 -msgid "A simple identifier for this action." +#: models.py:355 +msgid "A short text describing the action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:362 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" -msgstr "Typ zdarzenia" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Wymagane" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Typ zdarzenia" + +#: models.py:529 msgid "Document" msgstr "Dokument" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentarz" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -371,6 +485,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 "" @@ -409,318 +531,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:21 -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\"." @@ -728,19 +918,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" @@ -749,21 +941,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 813a5dda8c..56b311d775 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 d304d51639..96800b4138 100644 --- a/mayan/apps/document_states/locale/pt/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +17,78 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nenhum" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Utilizador" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "Detalhes adicionais" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Comentário" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "" @@ -91,250 +100,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Nome" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Não" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Sim" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Eliminar" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editar" -#: links.py:66 -msgid "Actions" -msgstr "Ações" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Ações" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" msgstr "" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "" + +#: models.py:294 +msgid "Workflow states" +msgstr "" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" -msgstr "Tipo de evento" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Tipo de evento" + +#: models.py:529 msgid "Document" msgstr "" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Comentário" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -370,6 +484,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 "" @@ -408,318 +530,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:21 -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\"." @@ -727,19 +917,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" @@ -748,21 +940,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 67e2cf4a6e..b0d4065b5e 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 09abbf69f0..e78ef92b8e 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Fluxos de trabalho" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Estado atual de um fluxo de trabalho" -#: apps.py:105 +#: 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:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nenhum" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Estado atual" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Usuário" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Última transação" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Data e hora" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Finalização" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Transações" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Comentário" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Quando?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Tipo de ação" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Acionadores" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Ações do estado do fluxo de trabalho" @@ -95,250 +104,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Ação" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "namespace" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Rótulo" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Habilitado" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Não" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Sim" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +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:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "Criar fluxo de trabalho" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Excluir" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Tipos de Documentos" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editar" -#: links.py:66 -msgid "Actions" -msgstr "Ações" - -#: links.py:72 -msgid "Create action" -msgstr "Criar ação" - -#: links.py:78 -msgid "Create state" -msgstr "Criar estado" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Estados" - -#: links.py:103 -msgid "Create transition" -msgstr "Criar Transições" - -#: links.py:122 -msgid "Transitions" -msgstr "Transições" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Acionadores de transição" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Visualizar" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Iniciar todos os fluxos de trabalho" +#: links.py:78 +msgid "Actions" +msgstr "Ações" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Documentos de fluxo de trabalho" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Nome interno" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Fluxo de trabalho" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Estado Inicial" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "Inicial" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Estado do fluxo de trabalho" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Estados do fluxo de trabalho" -#: models.py:279 -msgid "A simple identifier for this action." -msgstr "Um identificador simples para esta ação" +#: models.py:355 +msgid "A short text describing the action." +msgstr "" -#: 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:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "Quando" -#: models.py:291 +#: models.py:367 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:368 msgid "Entry action path" msgstr "Caminho da ação de entrada" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Dados da ação de entrada" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Ação do estado do fluxo de trabalho" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Estado original" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Estado de destino" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Transição do fluxo de trabalho" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Transições do fluxo de trabalho" -#: models.py:373 -msgid "Event type" -msgstr "Tipo de Evento" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "exigido" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Evento acionador de transição do fluxo de trabalho" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Eventos acionadores de transições de fluxos de trabalho" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Tipo de Evento" + +#: models.py:529 msgid "Document" msgstr "Documento" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Instância do fluxo de trabalho" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "instâncias do fluxo de trabalho" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Hora e data" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Comentário" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Entrada do registro de instâncias do fluxo de trabalho" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Entradas do registro de instâncias do fluxo de trabalho" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Não é uma opção de transição válida." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "Proxy de tempo de execução do fluxo de trabalho" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "Proxies de tempo de execução do fluxo de trabalho" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "Proxy de tempo de execução do fluxo de trabalho" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "Proxies de tempo de execução do fluxo de trabalho" @@ -374,6 +488,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." @@ -412,318 +534,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:21 -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\"." @@ -731,19 +921,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" @@ -752,21 +944,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 3bc2b0b014..d151662931 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 16b22f8dc3..ea4ba8e4e6 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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" @@ -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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "Fluxuri de lucru" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Starea curentă a unui flux de lucru" -#: apps.py:105 +#: 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:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Nici unul" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Starea curentă" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Utilizator" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Ultima tranziție" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Data și ora" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Finalizare" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Tranziție" +#: apps.py:229 +msgid "Additional details" +msgstr "Detalii suplimentare" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Comentariu" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "Cănd?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "Tipul de acțiune" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "Declanșatoare" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "Acțiuni de stare de lucru" @@ -92,250 +101,355 @@ msgstr "Flux de lucru creat" msgid "Workflow edited" msgstr "Fluxul de lucru a fost editat" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "Acțiune" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Spațiu de nume" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Etichetă" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Activat" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Nu" -#: forms.py:128 +#: forms.py:131 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." +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:182 links.py:197 models.py:451 models.py:506 models.py:673 +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:23 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:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Șterge" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Tipuri de documente" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Editează" -#: links.py:66 -msgid "Actions" -msgstr "Acţiuni" - -#: links.py:72 -msgid "Create action" -msgstr "Creați o acțiune" - -#: links.py:78 -msgid "Create state" -msgstr "Creați o stare" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Stări" - -#: links.py:103 -msgid "Create transition" -msgstr "Creați o tranziție" - -#: links.py:122 -msgid "Transitions" -msgstr "Tranziţii" - -#: links.py:129 -msgid "Transition triggers" -msgstr "Declanșatori de tranziții" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Previzualizare" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "Lansați toate fluxurile de lucru" +#: links.py:78 +msgid "Actions" +msgstr "Acţiuni" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "Documente de flux de lucru" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Nume intern" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "Flux de lucru" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Stare inițială" -#: models.py:203 -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ă." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"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:281 msgid "Initial" msgstr "Iniţială" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "Starea fluxului de lucru" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "Stările fluxului de lucru" -#: models.py:279 -msgid "A simple identifier for this action." -msgstr "Un identificator simplu pentru această acțiune." +#: models.py:355 +msgid "A short text describing the action." +msgstr "" -#: 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:362 +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:363 msgid "When" msgstr "Cănd" -#: models.py:291 +#: models.py:367 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:368 msgid "Entry action path" msgstr "Căi de acțiune pentru intrare" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "Datele privind acțiunile de intrare" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "Acțiune de stare de flux de lucru" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "Tip de acțiune necunoscut" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Stare originală" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Stare destinație" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Tranziția fluxului de lucru" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "Tranziții ale fluxului de lucru" -#: models.py:373 -msgid "Event type" -msgstr "Tip eveniment" +#: models.py:458 +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:377 +#: models.py:464 +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:468 +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:470 +msgid "Help text" +msgstr "Text de ajutor" + +#: models.py:474 +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:475 +msgid "Required" +msgstr "Necesară" + +#: models.py:479 +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:480 +msgid "Widget class" +msgstr "Clasa widget" + +#: models.py:484 +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:487 +msgid "Widget keyword arguments" +msgstr "Argumentele cuvintelor cheie pentru Widget " + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "Evenimentul de declanșare a tranziției fluxului de lucru" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "Evenimente de declanșare a tranzițiilor fluxului de lucru" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Tip eveniment" + +#: models.py:529 msgid "Document" msgstr "Document" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "Context" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "Instanță de flux de lucru" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "Instanțe de flux de lucru" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Marcă temporală" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Comentariu" + +#: models.py:680 +msgid "Extra data" +msgstr "Date suplimentare" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "Înregistrare din jurnalul instanțelor fluxului de lucru" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "Înregistrări din jurnalul instanțelor fluxului de lucru" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Nu este o alegere de tranziție valabilă." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "Proxy runtime pentru fluxul de lucru" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "Proxy-uri de runtime pentru fluxul de lucru" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "Proxy de runtime pentru starea fluxului de lucru" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "Proxy-uri runtime de stare de flux de lucru" @@ -371,6 +485,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ă." @@ -409,318 +531,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:21 -msgid "Workflow preview" -msgstr "" - -#: 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\"." @@ -728,19 +918,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" @@ -749,21 +941,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 15d2a3b58d..e927dcc646 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 54742977b5..fd5abcfa2a 100644 --- a/mayan/apps/document_states/locale/ru/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Ничего" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Текущее состояние" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Пользователь" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Дата и время" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Завершение" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Переход" +#: apps.py:229 +msgid "Additional details" +msgstr "Дополнительная информация" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Комментарий" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +msgid "Type" +msgstr "Тип" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "Документы" + +#: error_logs.py:8 models.py:378 msgid "Workflow state actions" msgstr "" @@ -92,250 +101,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Пространство имен" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Надпись" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Доступно" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Нет" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Да" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "Переход" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Удалить" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Типы документов" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Редактировать" -#: links.py:66 -msgid "Actions" -msgstr "Действия" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Предварительный просмотр" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Действия" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Внутреннее имя" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "Исходное состояние" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" msgstr "" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "" + +#: models.py:294 +msgid "Workflow states" +msgstr "" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" -msgstr "Тип события" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Требуется" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Тип события" + +#: models.py:529 msgid "Document" msgstr "Документ" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Комментарий" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -371,6 +485,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 "" @@ -409,318 +531,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:21 -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\"." @@ -728,19 +918,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" @@ -749,21 +941,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 cc04a62239..4185b5b859 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 eca2de2e41..c39cbf4114 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,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,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:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Brez" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" +#: apps.py:229 +msgid "Additional details" msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Komentar" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "" @@ -91,250 +100,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Imenski prostor" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Oznaka" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Ne" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Da" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Izbriši" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "" -#: links.py:66 -msgid "Actions" -msgstr "Akcije" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" +#: links.py:78 +msgid "Actions" +msgstr "Akcije" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" msgstr "" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "" + +#: models.py:294 +msgid "Workflow states" +msgstr "" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "" + +#: models.py:529 msgid "Document" msgstr "Dokument" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Komentar" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -370,6 +484,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 "" @@ -408,318 +530,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:21 -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\"." @@ -727,19 +917,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" @@ -748,21 +940,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 aaba2e92c0..7d0d810d11 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 76051f089c..43fa6e091e 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,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +18,78 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "İş Akışları" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "Bir iş akışının geçerli durumu" -#: apps.py:105 +#: 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:112 +#: 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:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "Yok" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "Mevcut durum" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Kullanıcı" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "Son geçiş" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "Tarih ve saat" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "Tamamlama" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "Geçiş" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Yorum Yap" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "" @@ -92,250 +101,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "Alanadı" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "Etiket" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "Etkin" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "Hayır" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "Evet" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "Geçiş" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "İş akışı oluştur" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "Sil" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "Belge tipleri" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Düzenle" -#: links.py:66 -msgid "Actions" -msgstr "Eylemler" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "Durum oluştur" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "Durumlar" - -#: links.py:103 -msgid "Create transition" -msgstr "Geçiş oluştur" - -#: links.py:122 -msgid "Transitions" -msgstr "Geçişler" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "Önizleme" -#: links.py:141 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: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:170 +#: links.py:207 msgid "Workflow documents" msgstr "İş akışı belgeleri" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "Dahili adı" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "İş Akışı" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "İlk durum" -#: models.py:203 -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." +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "ilk" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "İş akışı durumu" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "İş akışı durumları" -#: models.py:279 -msgid "A simple identifier for this action." +#: models.py:355 +msgid "A short text describing the action." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:362 +msgid "At which moment of the state this action will execute." msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "Kaynak Durum" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "Hedef durum" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "Iş akışı geçiş" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "İş akışı geçişleri" -#: models.py:373 -msgid "Event type" -msgstr "Etkinlik türü" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "Gereklidir" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Etkinlik türü" + +#: models.py:529 msgid "Document" msgstr "belge" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "İş akışı örneği" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "İş akışı örnekleri" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "Tarih saat" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Yorum Yap" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "İş akışı örneği günlük girişi" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "İş akışı örneği günlük girdileri" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "Geçerli bir geçiş seçeneği değil." -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "İş akışı çalışma zamanı vekili" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "İş akışı çalışma zamanı vekilleri" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "İş akışı durum çalışma zamanı vekili" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "İş akışı durum çalışma zamanı vekilleri" @@ -371,6 +485,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." @@ -409,318 +531,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:21 -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\"." @@ -728,19 +918,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" @@ -749,21 +941,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 5a666904c6..ca39dc0968 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 d650df2cd7..67df70157d 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,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +17,78 @@ msgstr "" "Language: vi_VN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "None" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "Người dùng" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "" +#: apps.py:229 +msgid "Additional details" +msgstr "chi tiết bổ sung" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "Chú thích" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +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:378 msgid "Workflow state actions" msgstr "" @@ -91,250 +100,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "Sửa" -#: links.py:66 -msgid "Actions" -msgstr "Các thao tác" - -#: links.py:72 -msgid "Create action" -msgstr "" - -#: links.py:78 -msgid "Create state" -msgstr "" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "" - -#: links.py:103 -msgid "Create transition" -msgstr "" - -#: links.py:122 -msgid "Transitions" -msgstr "" - -#: links.py:129 -msgid "Transition triggers" -msgstr "" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "" -#: links.py:141 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: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:170 +#: links.py:207 msgid "Workflow documents" msgstr "" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "" -#: models.py:203 -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 "" - -#: models.py:205 -msgid "Initial" -msgstr "" - -#: models.py:209 -msgid "" -"Enter 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 -msgid "Workflow state" -msgstr "" - -#: models.py:218 -msgid "Workflow states" +#: models.py:273 +msgid "A short text to describe the workflow state." msgstr "" #: models.py:279 -msgid "A simple identifier for this action." +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" +#: models.py:281 +msgid "Initial" msgstr "" -#: models.py:287 +#: models.py:285 +msgid "" +"The percent of completion that this state represents in relation to the " +"workflow. Use numbers without the percent sign." +msgstr "" + +#: models.py:293 models.py:352 +msgid "Workflow state" +msgstr "" + +#: models.py:294 +msgid "Workflow states" +msgstr "" + +#: models.py:355 +msgid "A short text describing the action." +msgstr "" + +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" + +#: models.py:363 msgid "When" msgstr "" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "" -#: models.py:373 -msgid "Event type" -msgstr "Loại sự kiện" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "Loại sự kiện" + +#: models.py:529 msgid "Document" msgstr "" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "Chú thích" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "" @@ -370,6 +484,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 "" @@ -408,318 +530,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:21 -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\"." @@ -727,19 +917,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" @@ -748,21 +940,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 12e6e062fd..24b2f75361 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 5757ea8222..4dd3eb5203 100644 --- a/mayan/apps/document_states/locale/zh/LC_MESSAGES/django.po +++ b/mayan/apps/document_states/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:45+0000\n" +"POT-Creation-Date: 2019-12-18 00:27-0400\n" +"PO-Revision-Date: 2019-12-13 05:14+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,69 +18,78 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: apps.py:62 events.py:8 links.py:17 links.py:46 links.py:149 links.py:176 -#: 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:72 settings.py:13 views/workflow_proxy_views.py:66 +#: views/workflow_template_views.py:103 msgid "Workflows" msgstr "工作流" -#: apps.py:104 apps.py:111 +#: apps.py:109 apps.py:116 msgid "Current state of a workflow" msgstr "工作流的当前状态" -#: apps.py:105 +#: apps.py:110 msgid "Return the current state of the selected workflow" msgstr "返回所选工作流的当前状态" -#: apps.py:112 +#: apps.py:117 msgid "" "Return the completion value of the current state of the selected workflow" msgstr "返回所选工作流的当前状态的完成值" -#: apps.py:165 apps.py:176 apps.py:186 apps.py:192 +#: apps.py:173 apps.py:184 apps.py:194 apps.py:200 msgid "None" msgstr "没有" -#: apps.py:170 +#: apps.py:178 msgid "Current state" msgstr "当前状态" -#: apps.py:174 apps.py:201 models.py:514 +#: apps.py:182 apps.py:209 models.py:677 msgid "User" msgstr "用户" -#: apps.py:180 +#: apps.py:188 msgid "Last transition" msgstr "最后的流转" -#: apps.py:184 apps.py:197 +#: apps.py:192 apps.py:205 msgid "Date and time" msgstr "日期和时间" -#: apps.py:190 models.py:211 +#: apps.py:198 models.py:287 msgid "Completion" msgstr "完成" -#: apps.py:204 forms.py:178 links.py:161 models.py:369 models.py:510 -msgid "Transition" -msgstr "流转" +#: apps.py:229 +msgid "Additional details" +msgstr "" -#: apps.py:208 forms.py:182 models.py:516 -msgid "Comment" -msgstr "评论" - -#: apps.py:231 +#: apps.py:252 msgid "When?" msgstr "何时?" -#: apps.py:235 +#: apps.py:256 msgid "Action type" msgstr "操作类型" -#: apps.py:251 +#: apps.py:272 msgid "Triggers" msgstr "触发器" -#: error_logs.py:8 models.py:302 +#: apps.py:286 models.py:454 +msgid "Type" +msgstr "类型" + +#: apps.py:294 +msgid "Widget" +msgstr "" + +#: apps.py:303 apps.py:309 +msgid "Documents" +msgstr "文档" + +#: error_logs.py:8 models.py:378 msgid "Workflow state actions" msgstr "工作流状态操作" @@ -92,250 +101,355 @@ msgstr "" msgid "Workflow edited" msgstr "" -#: forms.py:22 +#: forms.py:23 +msgid "The action type for this action entry." +msgstr "" + +#: forms.py:24 msgid "Action" msgstr "操作" -#: forms.py:117 +#: forms.py:120 msgid "Namespace" msgstr "命名空间" -#: forms.py:121 models.py:48 models.py:199 models.py:280 models.py:343 +#: forms.py:124 models.py:59 models.py:274 models.py:356 models.py:424 +#: models.py:465 msgid "Label" msgstr "标签" -#: forms.py:125 models.py:282 +#: forms.py:128 models.py:358 msgid "Enabled" msgstr "启用" -#: forms.py:127 +#: forms.py:130 msgid "No" msgstr "否" -#: forms.py:128 +#: forms.py:131 msgid "Yes" msgstr "是" #: forms.py:181 -msgid "Optional comment to attach to the transition." +msgid "Select a transition to execute in the next step." msgstr "" -#: handlers.py:62 +#: forms.py:182 links.py:197 models.py:451 models.py:506 models.py:673 +msgid "Transition" +msgstr "流转" + +#: handlers.py:19 +msgid "Workflow images" +msgstr "" + +#: handlers.py:78 #, python-format msgid "Event trigger: %s" msgstr "事件触发器:%s" -#: links.py:23 views/workflow_views.py:144 +#: links.py:26 views/workflow_template_views.py:108 msgid "Create workflow" msgstr "创建工作流" -#: links.py:29 links.py:53 links.py:85 links.py:110 +#: links.py:32 links.py:65 links.py:100 links.py:128 links.py:163 msgid "Delete" msgstr "删除" -#: links.py:35 models.py:52 +#: links.py:38 models.py:63 msgid "Document types" msgstr "文件类型" -#: links.py:42 links.py:60 links.py:92 links.py:117 +#: links.py:45 links.py:72 links.py:107 links.py:135 links.py:170 msgid "Edit" msgstr "编辑" -#: links.py:66 -msgid "Actions" -msgstr "操作" - -#: links.py:72 -msgid "Create action" -msgstr "创建操作" - -#: links.py:78 -msgid "Create state" -msgstr "创建状态" - -#: links.py:97 links.py:189 -msgid "States" -msgstr "状态" - -#: links.py:103 -msgid "Create transition" -msgstr "创建流转" - -#: links.py:122 -msgid "Transitions" -msgstr "流转" - -#: links.py:129 -msgid "Transition triggers" -msgstr "流转触发器" - -#: links.py:136 +#: links.py:56 msgid "Preview" msgstr "预览" -#: links.py:141 queues.py:13 -msgid "Launch all workflows" -msgstr "启动所有工作流" +#: links.py:78 +msgid "Actions" +msgstr "操作" + +#: 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:170 +#: links.py:207 msgid "Workflow documents" msgstr "工作流文档" -#: links.py:182 +#: 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:460 msgid "Internal name" msgstr "内部名称" -#: models.py:60 models.py:197 models.py:341 models.py:388 +#: models.py:58 +msgid "A short text to describe the workflow." +msgstr "" + +#: models.py:71 models.py:270 models.py:420 models.py:525 msgid "Workflow" msgstr "工作流" -#: models.py:74 +#: models.py:147 msgid "Initial state" msgstr "初始状态" -#: models.py:203 -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 "选择是否这是您希望工作流启动的状态。只有一个状态可以是初始状态。" +#: models.py:273 +msgid "A short text to describe the workflow state." +msgstr "" -#: models.py:205 +#: models.py:279 +msgid "" +"The state at which the workflow will start in. Only one state can be the " +"initial state." +msgstr "" + +#: models.py:281 msgid "Initial" msgstr "初始" -#: models.py:209 +#: models.py:285 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:293 models.py:352 msgid "Workflow state" msgstr "工作流状态" -#: models.py:218 +#: models.py:294 msgid "Workflow states" msgstr "工作流状态" -#: models.py:279 -msgid "A simple identifier for this action." -msgstr "此操作的简单标识符。" +#: models.py:355 +msgid "A short text describing the action." +msgstr "" -#: models.py:286 -msgid "At which moment of the state this action will execute" -msgstr "在该状态下此操作将执行" +#: models.py:362 +msgid "At which moment of the state this action will execute." +msgstr "" -#: models.py:287 +#: models.py:363 msgid "When" msgstr "何时" -#: models.py:291 +#: models.py:367 msgid "The dotted Python path to the workflow action class to execute." msgstr "要执行的工作流操作类的虚线Python路径。" -#: models.py:292 +#: models.py:368 msgid "Entry action path" msgstr "进入操作路径" -#: models.py:295 +#: models.py:371 msgid "Entry action data" msgstr "进入操作数据" -#: models.py:301 +#: models.py:377 msgid "Workflow state action" msgstr "工作流状态操作" -#: models.py:346 +#: models.py:410 +msgid "Unknown action type" +msgstr "" + +#: models.py:423 +msgid "A short text to describe the transition." +msgstr "" + +#: models.py:428 msgid "Origin state" msgstr "原始状态" -#: models.py:350 +#: models.py:432 msgid "Destination state" msgstr "目标状态" -#: models.py:358 +#: models.py:440 msgid "Workflow transition" msgstr "工作流流转" -#: models.py:359 +#: models.py:441 msgid "Workflow transitions" msgstr "工作流流转" -#: models.py:373 -msgid "Event type" -msgstr "事件类型" +#: models.py:458 +msgid "" +"The name that will be used to identify this field in other parts of the " +"workflow system." +msgstr "" -#: models.py:377 +#: models.py:464 +msgid "The field name that will be shown on the user interface." +msgstr "" + +#: models.py:468 +msgid "" +"An optional message that will help users better understand the purpose of " +"the field and data to provide." +msgstr "" + +#: models.py:470 +msgid "Help text" +msgstr "" + +#: models.py:474 +msgid "Whether this fields needs to be filled out or not to proceed." +msgstr "" + +#: models.py:475 +msgid "Required" +msgstr "需要的" + +#: models.py:479 +msgid "An optional class to change the default presentation of the field." +msgstr "" + +#: models.py:480 +msgid "Widget class" +msgstr "" + +#: models.py:484 +msgid "A group of keyword arguments to customize the widget. Use YAML format." +msgstr "" + +#: models.py:487 +msgid "Widget keyword arguments" +msgstr "" + +#: models.py:492 models.py:514 msgid "Workflow transition trigger event" msgstr "工作流流转触发事件" -#: models.py:378 +#: models.py:493 models.py:515 msgid "Workflow transitions trigger events" msgstr "工作流流转触发事件" -#: models.py:392 +#: models.py:510 +msgid "Event type" +msgstr "事件类型" + +#: models.py:529 msgid "Document" msgstr "文档" -#: models.py:398 models.py:503 +#: models.py:532 +msgid "Context" +msgstr "" + +#: models.py:538 models.py:666 msgid "Workflow instance" msgstr "工作流实例" -#: models.py:399 +#: models.py:539 msgid "Workflow instances" msgstr "工作流实例" -#: models.py:506 +#: models.py:669 msgid "Datetime" msgstr "日期时间" -#: models.py:520 +#: models.py:679 views/workflow_instance_views.py:139 +msgid "Comment" +msgstr "评论" + +#: models.py:680 +msgid "Extra data" +msgstr "" + +#: models.py:684 msgid "Workflow instance log entry" msgstr "工作流实例日志条目" -#: models.py:521 +#: models.py:685 msgid "Workflow instance log entries" msgstr "工作流实例日志条目" -#: models.py:528 +#: models.py:692 msgid "Not a valid transition choice." msgstr "不是有效的流转选择。" -#: models.py:561 +#: models.py:739 msgid "Workflow runtime proxy" msgstr "工作流运行时的代理" -#: models.py:562 +#: models.py:740 msgid "Workflow runtime proxies" msgstr "工作流运行时的代理" -#: models.py:568 +#: models.py:757 msgid "Workflow state runtime proxy" msgstr "工作流状态运行时的代理" -#: models.py:569 +#: models.py:758 msgid "Workflow state runtime proxies" msgstr "工作流状态运行时的代理" @@ -371,6 +485,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 "要添加的文档类型的主键。" @@ -409,318 +531,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:21 -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\"." @@ -728,19 +918,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" @@ -749,21 +941,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/migrations/0017_auto_20191213_0044.py b/mayan/apps/document_states/migrations/0017_auto_20191213_0044.py new file mode 100644 index 0000000000..b7ea78e336 --- /dev/null +++ b/mayan/apps/document_states/migrations/0017_auto_20191213_0044.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.26 on 2019-12-13 00:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('document_states', '0016_auto_20191108_2332'), + ] + + operations = [ + migrations.AlterField( + model_name='workflow', + name='label', + field=models.CharField(help_text='A short text to describe the workflow.', max_length=255, unique=True, verbose_name='Label'), + ), + migrations.AlterField( + model_name='workflowstate', + name='label', + field=models.CharField(help_text='A short text to describe the workflow state.', max_length=255, verbose_name='Label'), + ), + migrations.AlterField( + model_name='workflowstateaction', + name='label', + field=models.CharField(help_text='A short text describing the action.', max_length=255, verbose_name='Label'), + ), + migrations.AlterField( + model_name='workflowtransition', + name='label', + field=models.CharField(help_text='A short text to describe the transition.', max_length=255, verbose_name='Label'), + ), + ] diff --git a/mayan/apps/document_states/models.py b/mayan/apps/document_states/models.py index a5da8ab106..1dbc7ee99f 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 @@ -45,6 +55,7 @@ class Workflow(models.Model): verbose_name=_('Internal name') ) label = models.CharField( + help_text=_('A short text to describe the workflow.'), max_length=255, unique=True, verbose_name=_('Label') ) document_types = models.ManyToManyField( @@ -63,9 +74,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) @@ -196,17 +269,20 @@ class WorkflowState(models.Model): on_delete=models.CASCADE, related_name='states', to=Workflow, verbose_name=_('Workflow') ) - label = models.CharField(max_length=255, verbose_name=_('Label')) + label = models.CharField( + help_text=_('A short text to describe the workflow state.'), + max_length=255, verbose_name=_('Label') + ) 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') ) @@ -276,14 +352,14 @@ class WorkflowStateAction(models.Model): verbose_name=_('Workflow state') ) label = models.CharField( - max_length=255, help_text=_('A simple identifier for this action.'), + max_length=255, help_text=_('A short text describing the action.'), verbose_name=_('Label') ) enabled = models.BooleanField(default=True, verbose_name=_('Enabled')) 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( @@ -328,7 +404,10 @@ class WorkflowStateAction(models.Model): return self.get_class()(form_data=self.loads()) def get_class_label(self): - return self.get_class().label + try: + return self.get_class().label + except ImportError: + return _('Unknown action type') def loads(self): return json.loads(self.action_data) @@ -340,7 +419,10 @@ class WorkflowTransition(models.Model): on_delete=models.CASCADE, related_name='transitions', to=Workflow, verbose_name=_('Workflow') ) - label = models.CharField(max_length=255, verbose_name=_('Label')) + label = models.CharField( + help_text=_('A short text to describe the transition.'), + max_length=255, verbose_name=_('Label') + ) origin_state = models.ForeignKey( on_delete=models.CASCADE, related_name='origin_transitions', to=WorkflowState, verbose_name=_('Origin state') @@ -362,6 +444,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( @@ -391,6 +528,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',) @@ -401,15 +541,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( @@ -419,10 +574,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): """ @@ -488,6 +645,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): @@ -514,6 +677,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',) @@ -527,33 +691,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: @@ -561,9 +739,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..38666052c9 --- /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 new file mode 100644 index 0000000000..fe2a6e3aa3 --- /dev/null +++ b/mayan/apps/document_states/tests/test_links.py @@ -0,0 +1,142 @@ +from __future__ import unicode_literals + +from django.urls import reverse + +from mayan.apps.documents.tests.base import GenericDocumentViewTestCase + +from ..links import ( + link_workflow_runtime_proxy_document_list, + link_workflow_runtime_proxy_list, + link_workflow_runtime_proxy_state_document_list, + link_workflow_runtime_proxy_state_list, +) +from ..permissions import permission_workflow_view + +from .mixins import WorkflowTestMixin + + +class WorkflowRuntimeProxyLinkTestCase( + WorkflowTestMixin, GenericDocumentViewTestCase +): + def _resolve_test_link(self, test_object=None): + self.add_test_view(test_object=test_object) + context = self.get_test_view() + self.resolved_test_link = self.test_link.resolve(context=context) + + def test_workflow_runtime_proxy_document_list_link_no_permission(self): + self.test_link = link_workflow_runtime_proxy_document_list + + self._create_test_workflow(add_document_type=True) + + self._resolve_test_link(test_object=self.test_workflow_runtime_proxy) + + self.assertEqual(self.resolved_test_link, None) + + def test_workflow_runtime_proxy_document_list_link_with_access(self): + self.test_link = link_workflow_runtime_proxy_document_list + + self._create_test_workflow(add_document_type=True) + + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_view + ) + + 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_runtime_proxy.pk + } + ) + ) + + def test_workflow_runtime_proxy_link_no_permission(self): + self.test_link = link_workflow_runtime_proxy_list + + self._create_test_workflow(add_document_type=True) + + self._resolve_test_link() + self.assertEqual(self.resolved_test_link, None) + + def test_workflow_runtime_proxy_link_with_access(self): + self.test_link = link_workflow_runtime_proxy_list + + self._create_test_workflow(add_document_type=True) + + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_view + ) + + self._resolve_test_link() + + self.assertNotEqual(self.resolved_test_link, None) + self.assertEqual( + self.resolved_test_link.url, + reverse( + viewname=self.test_link.view, + ) + ) + + def test_workflow_runtime_proxy_state_document_list_link_no_permission(self): + self.test_link = link_workflow_runtime_proxy_state_document_list + + self._create_test_workflow(add_document_type=True) + self._create_test_workflow_state() + + self._resolve_test_link(test_object=self.test_workflow_state_runtime_proxy) + + self.assertEqual(self.resolved_test_link, None) + + def test_workflow_runtime_proxy_state_document_list_link_with_access(self): + self.test_link = link_workflow_runtime_proxy_state_document_list + + self._create_test_workflow(add_document_type=True) + self._create_test_workflow_state() + + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_view + ) + + 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_runtime_proxy.pk + } + ) + ) + + def test_workflow_runtime_proxy_state_list_link_no_permission(self): + self.test_link = link_workflow_runtime_proxy_state_list + + self._create_test_workflow(add_document_type=True) + + 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): + self.test_link = link_workflow_runtime_proxy_state_list + + self._create_test_workflow(add_document_type=True) + + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_view + ) + + 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_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..6c24dc2823 100644 --- a/mayan/apps/documents/api_views.py +++ b/mayan/apps/documents/api_views.py @@ -6,13 +6,12 @@ from django.http import HttpResponse 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 mayan.apps.common.generics import DownloadMixin 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,18 +111,13 @@ class APIDocumentDownloadView(DownloadMixin, generics.RetrieveAPIView): mayan_object_permissions = { 'GET': (permission_document_download,) } - permission_classes = (MayanPermission,) queryset = Document.objects.all() - def get_encoding(self): - return self.get_object().latest_version.encoding + def get_download_file_object(self): + return self.get_object().open() - def get_file(self): - instance = self.get_object() - return VirtualFile(instance.latest_version.file, name=instance.label) - - def get_mimetype(self): - return self.get_object().latest_version.mimetype + def get_download_filename(self): + return self.get_object().label def get_serializer(self, *args, **kwargs): return None @@ -124,9 +134,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 +173,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 +183,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 +205,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 +267,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 +298,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 +317,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 @@ -333,10 +345,11 @@ class APIDocumentVersionDownloadView(DownloadMixin, generics.RetrieveAPIView): ) return document - def get_encoding(self): - return self.get_object().encoding + def get_download_file_object(self): + instance = self.get_object() + return instance.open() - def get_file(self): + def get_download_filename(self): preserve_extension = self.request.GET.get( 'preserve_extension', self.request.POST.get( 'preserve_extension', False @@ -346,15 +359,10 @@ class APIDocumentVersionDownloadView(DownloadMixin, generics.RetrieveAPIView): preserve_extension = preserve_extension == 'true' or preserve_extension == 'True' instance = self.get_object() - return VirtualFile( - instance.file, name=instance.get_rendered_string( - preserve_extension=preserve_extension - ) + return instance.get_rendered_string( + preserve_extension=preserve_extension ) - def get_mimetype(self): - return self.get_object().mimetype - def get_serializer(self, *args, **kwargs): return None @@ -382,7 +390,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 +448,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 d0443f1578..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, @@ -199,27 +219,28 @@ class DocumentsApp(MayanAppConfig): permission_document_create, permission_document_type_delete, permission_document_type_edit, permission_document_type_view, permission_acl_edit, permission_acl_view, - 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_version_view, permission_document_view, - permission_events_view, permission_transformation_create, - permission_transformation_delete, - permission_transformation_edit, permission_transformation_view, + permission_events_view, ) ) 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', ) @@ -262,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, @@ -310,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 @@ -385,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 @@ -511,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,) ) @@ -527,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_forms.py b/mayan/apps/documents/forms/document_forms.py index c1febeffbe..f26a3b8d32 100644 --- a/mayan/apps/documents/forms/document_forms.py +++ b/mayan/apps/documents/forms/document_forms.py @@ -45,7 +45,9 @@ class DocumentDownloadForm(forms.Form): super(DocumentDownloadForm, self).__init__(*args, **kwargs) if self.queryset.count() > 1: self.fields['compressed'].initial = True - self.fields['compressed'].widget.attrs.update({'disabled': True}) + self.fields['compressed'].widget.attrs.update( + {'disabled': 'disabled'} + ) class DocumentForm(forms.ModelForm): 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 6b080d1309..11e8048761 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "صفحات" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "النسخ المكررة" -#: apps.py:284 +#: 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 "" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "اسم الملف المضغوط سيحتوي الوثائق التي سيتم تحويلها، اذا تم اختيار الخيار السابق" -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "إعادة تسمية الوثيقة بسرعة" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "تاريخ الاضافة" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "نوع الملف" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "لا شيء" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "حجم الملف" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "موجود في التخزين" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "مسار الملف في التخزين" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "تحميل الوثائق" @@ -745,187 +746,189 @@ 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 "النسبة المئوية لتكبير أو تصغير في صفحة الوثيقة لكل مستخدم." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:272 +#: 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" @@ -1052,68 +1075,68 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "سيتم حذف جميع الإصدارات اللاحقة بعد هذا الإصدار أيضا." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "تم ارجاع اصدار الوثيقة بنجاح" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "خطأ بارجاع اصدار الوثيقة %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "ارسال" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 f2f0179ea3..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 1e27a9f00b..08b6bc940c 100644 --- a/mayan/apps/documents/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/bg/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:28-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" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,114 +18,120 @@ msgstr "" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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 "" +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 "" +msgstr "На всеки качен документ трябва да бъде присвоен тип документ, това е основният начин, по който Mayan EDMS категоризира документите." -#: apps.py:151 +#: apps.py:171 msgid "Versions comment" -msgstr "" +msgstr "Коментар на версиите" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" -msgstr "" +msgstr "Кодиране на версиите" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" -msgstr "" +msgstr "Мime тип на версиите" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" -msgstr "" +msgstr "Времева марка на версиите" -#: apps.py:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" -msgstr "" +msgstr "Умалено изображение" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Страници" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" -msgstr "" +msgstr "Дубликати" -#: apps.py:284 +#: apps.py:313 msgid "Type" -msgstr "" +msgstr "Тип" #: dashboard_widgets.py:24 msgid "Total pages" -msgstr "" +msgstr "Общо страници" #: dashboard_widgets.py:47 msgid "Total documents" -msgstr "" +msgstr "Общо документи" #: dashboard_widgets.py:66 views/trashed_document_views.py:136 msgid "Documents in trash" -msgstr "" +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 "" +msgstr "Типове документи" #: dashboard_widgets.py:104 msgid "New documents this month" -msgstr "" +msgstr "Нови документи този месец" #: dashboard_widgets.py:118 msgid "New pages this month" -msgstr "" +msgstr "Нови страници този месец" #: events.py:10 msgid "Document created" -msgstr "" +msgstr "Документът е създаден" #: events.py:13 msgid "Document downloaded" -msgstr "" +msgstr "Документът е изтеглен" #: events.py:16 msgid "New version uploaded" -msgstr "" +msgstr "Качена нова версия" #: events.py:19 msgid "Document properties edited" -msgstr "" +msgstr "Свойствата на документа са редактирани" -#: events.py:23 +#: events.py:22 +msgid "Document trashed" +msgstr "Изхвърлени документи" + +#: events.py:26 msgid "Document type changed" -msgstr "" +msgstr "Типът документ е променен" -#: events.py:27 +#: events.py:30 msgid "Document type created" -msgstr "" - -#: events.py:31 -msgid "Document type edited" -msgstr "" +msgstr "Тип на документа е създаден" #: events.py:34 -msgid "Document version reverted" -msgstr "" +msgid "Document type edited" +msgstr "Тип на документа редактиран" #: events.py:37 +msgid "Document version reverted" +msgstr "Версията на документа е обърната" + +#: events.py:40 msgid "Document viewed" -msgstr "" +msgstr "Прегледан документ" #: forms/document_forms.py:26 msgid "Compress" @@ -135,7 +142,7 @@ msgid "" "Download the document in the original format or in a compressed manner. This" " option is selectable only when downloading one document, for multiple " "documents, the bundle will always be downloads as a compressed file." -msgstr "" +msgstr "Изтеглете документа в оригиналния формат или по компресиран начин. Тази опция е избираема само при изтегляне на един документ, за много документи пакетът винаги ще бъде изтеглян като компресиран файл." #: forms/document_forms.py:35 msgid "Compressed filename" @@ -147,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Името на компресирания архив, съдържащ документите за сваляне, ако предишната опция е избрана." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Бързо преименуване на документ" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" -msgstr "" +msgstr "Запазване на разширението" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." -msgstr "" +msgstr "Взема разширението на файла и го премества в края на името на файла, което позволява на операционните системи, които разчитат на разширения на файлове, да отворят правилно документа." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Дата на добавяне" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" -msgstr "" +msgstr "Език" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "mimetype на файла" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Няма" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" -msgstr "" +msgstr "Кодиране на файлове" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Размер на файла" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Съществува в склада" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "Файлов път до склада" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 literals.py:43 msgid "Page range" msgstr "Поредица от страници" @@ -210,233 +217,245 @@ msgstr "Поредица от страници" msgid "" "Page number from which all the transformations will be cloned. Existing " "transformations will be lost." -msgstr "" +msgstr "Номер на страницата, от която ще бъдат клонирани всички трансформации. Съществуващите трансформации ще бъдат загубени." #: forms/document_type_forms.py:42 models/document_models.py:45 #: models/document_type_models.py:60 models/document_type_models.py:146 #: search.py:35 search.py:59 msgid "Document type" -msgstr "Вид на документа" +msgstr "Тип на документа" #: forms/document_version_forms.py:17 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open the downloaded " "document version correctly." -msgstr "" +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 "" +msgstr "Изчисти трансформациите" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" -msgstr "" +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 "" +msgstr "Промяна на типа" -#: links.py:148 links.py:209 +#: links/document_links.py:42 links/document_links.py:77 msgid "Advanced download" -msgstr "" +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:97 msgid "All documents" -msgstr "" +msgstr "Всички документи" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" -msgstr "" +msgstr "Наскоро достъпени" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 msgid "Recently added" -msgstr "" +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 "" +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 "" +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 "" +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 "" +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 "" +msgstr "Дублирани документи" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" -msgstr "" +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 "" +msgstr "Всички страници" #: models/document_models.py:39 msgid "" "UUID of a document, universally Unique ID. An unique identifier generated " "for each document." -msgstr "" +msgstr "UUID на документ, универсално уникален идентификационен номер. Уникален идентификатор, генериран за всеки документ." #: models/document_models.py:49 msgid "The name of the document." -msgstr "" +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" -msgstr "" +msgstr "Етикет" #: models/document_models.py:53 msgid "An optional short text describing a document." -msgstr "" +msgstr "Незадължителен кратък текст, описващ документ." #: models/document_models.py:54 search.py:41 search.py:69 msgid "Description" @@ -446,175 +465,158 @@ msgstr "Описание" msgid "" "The server date and time when the document was finally processed and added " "to the system." -msgstr "" +msgstr "Дата и час на сървъра, когато документът е окончателно обработен и добавен към системата." #: models/document_models.py:60 models/misc_models.py:41 msgid "Added" -msgstr "" +msgstr "Добавен" #: models/document_models.py:64 msgid "The dominant language in the document." -msgstr "" +msgstr "Преобладаващият език в документа." #: models/document_models.py:69 msgid "Whether or not this document is in the trash." -msgstr "" +msgstr "Дали този документ е в кошчето или не." #: models/document_models.py:70 msgid "In trash?" -msgstr "" +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 "" +msgstr "Дата и час на сървъра, когато документът е преместен в кошчето." -#: models/document_models.py:77 +#: models/document_models.py:76 msgid "Date and time trashed" -msgstr "" +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 "" +msgstr "Кочан на документ е документ със запис в базата данни, но не е качен файл. Това може да бъде прекъснато качване или отложено качване чрез API." -#: models/document_models.py:84 +#: models/document_models.py:83 msgid "Is stub?" -msgstr "" +msgstr "Кочан ли е?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" -msgstr "" +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 "" +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 "" +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 "" +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 "" +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 "" +msgstr "Име на типа документ." #: models/document_type_models.py:36 msgid "" "Amount of time after which documents of this type will be moved to the " "trash." -msgstr "" +msgstr "Време, след което документи от този тип ще бъдат преместени в кошчето." #: models/document_type_models.py:38 msgid "Trash time period" -msgstr "" +msgstr "Период до изхвърляне" #: models/document_type_models.py:42 msgid "Trash time unit" -msgstr "" +msgstr "Единица време за периода до изхвърляне" #: models/document_type_models.py:46 msgid "" "Amount of time after which documents of this type in the trash will be " "deleted." -msgstr "" +msgstr "Време, след което документи от този тип в кошчето ще бъдат изтрити." #: models/document_type_models.py:48 msgid "Delete time period" -msgstr "" +msgstr "Изтриване на период от време" #: models/document_type_models.py:53 msgid "Delete time unit" -msgstr "" +msgstr "Изтриване на единица време" #: models/document_type_models.py:61 msgid "Documents types" -msgstr "" - -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "" +msgstr "Типове документи" #: models/document_type_models.py:156 msgid "Quick label" -msgstr "" +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 "" +msgstr "Дата и час на сървъра, когато е обработена версията на документа." -#: models/document_version_models.py:79 +#: models/document_version_models.py:72 msgid "Timestamp" -msgstr "" +msgstr "Времева марка" -#: models/document_version_models.py:83 +#: models/document_version_models.py:76 msgid "An optional short text describing the document version." -msgstr "" +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 "" +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 "" +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 "" +msgstr "Кодиране на файла на версията на документа. двоичен 7-битов, двоичен 8-битов, текст, base64 и т.н." -#: models/document_version_models.py:104 +#: models/document_version_models.py:97 msgid "Encoding" -msgstr "" +msgstr "Кодиране" #: models/misc_models.py:47 msgid "Duplicated document" -msgstr "" +msgstr "Дублиран документ" #: models/misc_models.py:61 models/misc_models.py:90 msgid "User" @@ -622,23 +624,23 @@ msgstr "Потребител" #: models/misc_models.py:71 msgid "Favorite document" -msgstr "" +msgstr "Любим документ" #: models/misc_models.py:72 msgid "Favorite documents" -msgstr "" +msgstr "Любими документи" #: models/misc_models.py:97 msgid "Accessed" -msgstr "" +msgstr "Ползван" #: models/misc_models.py:104 msgid "Recent document" -msgstr "" +msgstr "Скорошен документ" #: models/misc_models.py:105 msgid "Recent documents" -msgstr "" +msgstr "Последни документи" #: permissions.py:10 msgid "Create documents" @@ -650,9 +652,9 @@ msgstr "Изтриване на документи" #: permissions.py:16 msgid "Trash documents" -msgstr "" +msgstr "Изхвърли документи" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:205 msgid "Download documents" msgstr "Изтегляне на документи" @@ -670,11 +672,11 @@ msgstr "Редактиране на свойства на документа" #: permissions.py:31 msgid "Print documents" -msgstr "" +msgstr "Печат на документи" #: permissions.py:34 msgid "Restore trashed document" -msgstr "" +msgstr "Възстановяване на изхвърлени документи" #: permissions.py:37 msgid "Execute document modifying tools" @@ -686,7 +688,7 @@ msgstr "Връщане на документите към предишна ве #: permissions.py:44 msgid "View documents' versions list" -msgstr "" +msgstr "Преглед на списъка с версии на документи" #: permissions.py:48 msgid "View documents" @@ -694,15 +696,15 @@ msgstr "Преглед на документи" #: permissions.py:59 msgid "Create document types" -msgstr "Създаване на вид на документа" +msgstr "Създаване на тип документ" #: permissions.py:62 msgid "Delete document types" -msgstr "Изтриване на вида документи" +msgstr "Изтриване на типове документи" #: permissions.py:65 msgid "Edit document types" -msgstr "Редактиране на вида документи" +msgstr "Редактиране на типове документи" #: permissions.py:68 msgid "View document types" @@ -710,227 +712,229 @@ msgstr "Преглед на типовете документи" #: queues.py:17 msgid "Converter" -msgstr "" +msgstr "Конвертор" #: queues.py:20 msgid "Documents periodic" -msgstr "" +msgstr "Периодика на документите" #: queues.py:23 msgid "Uploads" -msgstr "" +msgstr "Качвания" #: queues.py:31 msgid "Generate document page image" -msgstr "" +msgstr "Генериране на изображение на страницата на документа" #: queues.py:36 msgid "Delete a document" -msgstr "" +msgstr "Изтриване на документ" #: queues.py:40 msgid "Clean empty duplicate lists" -msgstr "" +msgstr "Изчистване на празни дублиращи се списъци" #: queues.py:45 msgid "Check document type delete periods" -msgstr "" +msgstr "Проверете периодите на изтриване на типа документ" #: queues.py:53 msgid "Check document type trash periods" -msgstr "" +msgstr "Проверете периодите на изхвърляне на типа документ" #: queues.py:59 msgid "Delete document stubs" -msgstr "" +msgstr "Изтрийте кочаните на документи" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" +#: queues.py:71 +msgid "Update document page count" +msgstr "Актуализиране на броя на страниците на документа" #: queues.py:75 -msgid "Update document page count" -msgstr "" +msgid "Upload new document version" +msgstr "Качете нова версия на документа" #: queues.py:79 -msgid "Upload new document version" -msgstr "" - -#: queues.py:83 msgid "Scan document duplicates" -msgstr "" +msgstr "Дублирания на сканове на документи" -#: settings.py:19 +#: settings.py:26 msgid "" -"Path to the Storage subclass to use when storing the cached document image " -"files." -msgstr "" - -#: settings.py:28 -msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." -msgstr "" +"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:42 +msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." +msgstr "Аргументи за подаване към DOCUMENT_CACHE_STORAGE_BACKEND." + +#: settings.py:48 +msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." -msgstr "" +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 "" +msgstr "Деактивира втория кеш слой, който съхранява средни до ниски разделителни способности, трансформирани (завъртяни, увеличени и т.н.) версии на страниците на документи." -#: settings.py:55 +#: settings.py:69 msgid "Maximum number of favorite documents to remember per user." -msgstr "" +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 "" +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 "" +msgstr "Размер на блоковете, които да се използват при изчисляване на контролната сума на файла на документа. Стойност 0 деактивира изчислението на блока и целият файл ще бъде зареден в паметта." -#: settings.py:77 +#: settings.py:91 msgid "Default documents language (in ISO639-3 format)." -msgstr "" +msgstr "Език на документи по подразбиране (във формат ISO639-3)." -#: settings.py:81 +#: settings.py:95 msgid "List of supported document languages. In ISO639-3 format." -msgstr "" +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 "" +msgstr "Време за секунди за което браузърът трябва да кешира предоставените изображения на документи. По подразбиране 31559626 секунди съответства на 1 година." -#: settings.py:105 +#: settings.py:119 msgid "" "Maximum number of recently accessed (created, edited, viewed) documents to " "remember per user." -msgstr "" +msgstr "Максимален брой наскоро ползвани (създадени, редактирани, прегледани) документи, които да се запомнят на потребител." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." -msgstr "" +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 "" +msgstr "Път към подклас Storage, който да се използва при съхранение на файлове с документи." -#: settings.py:132 +#: settings.py:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." -msgstr "" +msgstr "Аргументи за подаване към DOCUMENT_STORAGE_BACKEND." -#: settings.py:136 +#: settings.py:149 msgid "Height in pixels of the document thumbnail image." -msgstr "" +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 "Процент приближавани или отдалечаване на страницата на документа, приложен за потребителя" +msgstr "Процент приближаване или отдалечаване на страницата на документа, приложен за потребителя" -#: statistics.py:18 +#: statistics.py:17 msgid "January" -msgstr "" +msgstr "Януари" -#: statistics.py:18 +#: statistics.py:17 msgid "February" -msgstr "" +msgstr "Февруари" -#: statistics.py:18 +#: statistics.py:17 msgid "March" -msgstr "" +msgstr "Март" -#: statistics.py:18 +#: statistics.py:17 msgid "April" -msgstr "" +msgstr "Април" + +#: statistics.py:17 +msgid "May" +msgstr "Май" #: statistics.py:18 -msgid "May" -msgstr "" - -#: statistics.py:19 msgid "June" -msgstr "" +msgstr "Юни" -#: statistics.py:19 +#: statistics.py:18 msgid "July" -msgstr "" +msgstr "Юли" -#: statistics.py:19 +#: statistics.py:18 msgid "August" -msgstr "" +msgstr "Август" -#: statistics.py:19 +#: statistics.py:18 msgid "September" -msgstr "" +msgstr "Септември" + +#: statistics.py:18 +msgid "October" +msgstr "Октомври" #: statistics.py:19 -msgid "October" -msgstr "" - -#: statistics.py:20 msgid "November" -msgstr "" +msgstr "Ноември" -#: statistics.py:20 +#: statistics.py:19 msgid "December" -msgstr "" +msgstr "Декември" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" -msgstr "" +msgstr "Нови документи на месец" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" -msgstr "" +msgstr "Нови версии на документи на месец" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" -msgstr "" +msgstr "Нови страници на документи на месец" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" -msgstr "" +msgstr "Общо документи на всеки месец" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" -msgstr "" +msgstr "Общо версии на документи на всеки месец" -#: statistics.py:272 +#: statistics.py:275 msgid "Total document pages at each month" -msgstr "" +msgstr "Общо страници от документи на всеки месец" #: templates/documents/document_print.html:12 msgid "Document page image preview" -msgstr "" +msgstr "Визуализация на изображението на страницата на документа" #: templates/documents/forms/widgets/document_page_carousel.html:16 #, python-format @@ -938,55 +942,67 @@ msgid "" "\n" " Page %(page_number)s of %(total_pages)s\n" " " -msgstr "" +msgstr "\n Страница %(page_number)s от %(total_pages)s\n " #: templates/documents/forms/widgets/document_page_carousel.html:22 msgid "No pages to display" -msgstr "" +msgstr "Няма страници за показване" #: templates/documents/forms/widgets/document_page_image.html:13 msgid "Document image" -msgstr "" +msgstr "Документно изображение" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" -msgstr "" +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 " "document page recalculation action to attempt to introspect the page count " "again." -msgstr "" +msgstr "Това може да означава, че документът е във формат, който не се поддържа, че е повреден или че процесът на качване е прекъснат. Използвайте действието за преизчисляване на страниците на документ, за да се опитате отново да прегледате броя на страниците." -#: views/document_page_views.py:59 +#: views/document_page_views.py:62 msgid "No document pages available" -msgstr "" +msgstr "Няма налични страници от документ" -#: views/document_page_views.py:61 +#: views/document_page_views.py:64 #, python-format msgid "Pages for document: %s" -msgstr "" +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 "" +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" -msgstr "" +msgstr "Документи от тип: %s" #: views/document_type_views.py:71 msgid "" @@ -994,295 +1010,310 @@ msgid "" "system will depend on them. Define a document type for each type of physical" " document you intend to upload. Example document types: invoice, receipt, " "manual, prescription, balance sheet." -msgstr "" +msgstr "Типовете документи са най-основните единици за конфигурация. Всичко в системата зависи от тях. Определете типа документ за всеки тип физически документ, който възнамерявате да качите. Примерни типове документи: фактура, разписка, наръчник, рецепта, баланс." #: views/document_type_views.py:77 msgid "No document types available" -msgstr "" +msgstr "Няма налични типове документи" #: views/document_type_views.py:106 msgid "All documents of this type will be deleted too." -msgstr "" +msgstr "Всички документи от този тип също ще бъдат изтрити." #: views/document_type_views.py:108 #, python-format msgid "Delete the document type: %s?" -msgstr "" +msgstr "Изтриване на тип документ: %s?" #: views/document_type_views.py:125 #, python-format msgid "Deletion policies for document type: %s" -msgstr "" +msgstr "Политики за изтриване за тип документ: %s" #: views/document_type_views.py:144 #, python-format msgid "Edit document type: %s" -msgstr "" +msgstr "Редактиране на тип документ: %s" #: views/document_type_views.py:167 #, python-format msgid "Create quick label for document type: %s" -msgstr "" +msgstr "Създайте бърз етикет за типа документ: %s" #: views/document_type_views.py:186 #, python-format msgid "" "Delete the quick label: %(label)s, from document type \"%(document_type)s\"?" -msgstr "" +msgstr "Да се изтрие ли бързият етикет: %(label)s, от тип документ "%(document_type)s"?" #: views/document_type_views.py:215 #, python-format msgid "Edit quick label \"%(filename)s\" from document type \"%(document_type)s\"" -msgstr "" +msgstr "Редактиране на бърз етикет „%(filename)s“ от документ тип „%(document_type)s“" #: views/document_type_views.py:253 msgid "" "Quick labels are predetermined filenames that allow the quick renaming of " "documents as they are uploaded by selecting them from a list. Quick labels " "can also be used after the documents have been uploaded." -msgstr "" +msgstr "Бързите етикети са предварително определени имена на файлове, които позволяват бързото преименуване на документите при тяхното качване, като се избират от списък. Бързите етикети могат да се използват и след качването на документите." #: views/document_type_views.py:259 msgid "There are no quick labels for this document type" -msgstr "" +msgstr "Няма бързи етикети за този тип документи" #: views/document_type_views.py:262 #, python-format msgid "Quick labels for document type: %s" -msgstr "" +msgstr "Бързи етикети за типа документ: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" -msgstr "" +msgstr "Изтеглете версията на документа" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" -msgstr "" +msgstr "Версии на документа: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Всички версии, следващи тази, ще бъдат изтрити." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" -msgstr "" +msgstr "Да се върнете ли към тази версия?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" -msgstr "Документа е върнат успешно към предна версия" +msgstr "Документът е върнат успешно към предна версия" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Грешка при връщане на версията на документа; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" -msgstr "" +msgstr "Визуализация на версията на документа: %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." -msgstr "" +msgstr "Грешка при извличането на списъка с документи: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:92 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 "" +msgstr "Това може да означава, че не са качени документи или че потребителският ви акаунт не е получил разрешение за преглед за всеки документ или тип документ." -#: views/document_views.py:94 +#: views/document_views.py:96 msgid "No documents available" -msgstr "" +msgstr "Няма налични документи" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" -msgstr "" +msgstr "Заявка за промяна на типа документ, извършена на %(count)d документ " -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" -msgstr "" - -#: views/document_views.py:117 -msgid "Change" -msgstr "" +msgstr "Заявка за промяна на типа документ, извършена за %(count)d документи" #: views/document_views.py:119 +msgid "Change" +msgstr "Промяна" + +#: views/document_views.py:121 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Променете типа на избрания документ" +msgstr[1] "Променете типа на избраните документи" -#: views/document_views.py:130 +#: views/document_views.py:132 #, python-format msgid "Change the type of the document: %s" -msgstr "" +msgstr "Променете типа на документа: %s" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." -msgstr "" +msgstr "Типът на документа за "%s" е променен успешно." -#: views/document_views.py:220 +#: views/document_views.py:203 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 +#: views/document_views.py:295 #, python-format -msgid "Duplicates for document: %s" -msgstr "" +msgid "Edit properties of document: %s" +msgstr "Редактиране на свойствата на документа: %s" + +#: views/document_views.py:331 +#, python-format +msgid "Preview of document: %s" +msgstr "Визуализация на документа: %s" + +#: views/document_views.py:349 +#, python-format +msgid "Properties for document: %s" +msgstr "Свойства на документа: %s" + +#: views/document_views.py:357 +#, python-format +msgid "%(count)d document queued for page count recalculation" +msgstr "%(count)d документ на опашка за преизчисляване на броя на страниците" + +#: views/document_views.py:360 +#, python-format +msgid "%(count)d documents queued for page count recalculation" +msgstr "%(count)d документи на опашка за преизчисляване на броя на страниците" + +#: views/document_views.py:368 +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:379 #, python-format -msgid "Edit properties of document: %s" -msgstr "" - -#: views/document_views.py:415 -#, python-format -msgid "Preview of document: %s" -msgstr "" - -#: views/document_views.py:433 -#, python-format -msgid "Properties for document: %s" -msgstr "" - -#: views/document_views.py:441 -#, python-format -msgid "%(count)d document queued for page count recalculation" -msgstr "" - -#: views/document_views.py:444 -#, python-format -msgid "%(count)d documents queued for page count recalculation" -msgstr "" - -#: views/document_views.py:452 -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 -#, python-format msgid "Recalculate the page count of the document: %s?" -msgstr "" +msgstr "Преизчисляване броя на страниците на документа: %s?" -#: views/document_views.py:479 +#: views/document_views.py:395 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." -msgstr "" +msgstr "Документът "%(document)s" е празен. Качете поне една версия на документа, преди да се опитате да откриете броя на страниците." -#: views/document_views.py:492 +#: views/document_views.py:408 #, python-format msgid "Transformation clear request processed for %(count)d document" -msgstr "" +msgstr "Заявка за изчистване на трансформация, обработена за %(count)d документ" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" -msgstr "" +msgstr "Заявка за изчистване на трансформация, обработена за %(count)d документи" -#: views/document_views.py:503 +#: views/document_views.py:419 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] "" +msgstr[0] "Да се изчистят ли всички трансформации на страницата за избрания документ?" +msgstr[1] "Да се изчистят ли всички трансформации на страницата за избрания документ?" -#: views/document_views.py:514 +#: views/document_views.py:430 #, python-format msgid "Clear all the page transformations for the document: %s?" -msgstr "" +msgstr "Да се изчистят ли всички трансформации на страници за документа: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:445 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." -msgstr "Грешка при изтриването на преобразования на страница на документ %(document)s, %(error)s." +msgstr "Грешка при изтриването на трансформация на страница на документ %(document)s, %(error)s." -#: views/document_views.py:565 +#: views/document_views.py:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "Грешка при клониране на трансформациите на страниците за документ: %(document)s; %(error)s." + +#: views/document_views.py:485 msgid "Transformations cloned successfully." -msgstr "" +msgstr "Трансформациите клонирани успешно." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Подаване" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" -msgstr "" +msgstr "Клониране на трансформации на страница за документ: %s" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" -msgstr "" +msgstr "Печат: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Този изглед ще изброява най-новите документи, гледани или манипулирани по някакъв начин от този потребителски акаунт." + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "Няма наскоро работени документи" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Този изглед ще изброява последните документи, качени в системата." + +#: views/document_views.py:632 +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 "" +msgstr "Дублиращи са документи, които са съставени от същия файл, до последния байт. Файлове, които имат един и същ текст или OCR, но не са идентични или са запазени с различен файлов формат, няма да се появят като дубликати." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" -msgstr "" +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 msgid "" "Favorited documents will be listed in this view. Up to %(count)d documents " "can be favorited per user. " -msgstr "" +msgstr "Любимите документи ще бъдат изброени в този изглед. До %(count)d документи могат да бъдат предпочитани на потребител." #: views/favorite_document_views.py:36 msgid "There are no favorited documents." -msgstr "" +msgstr "Няма избрани документи." #: views/favorite_document_views.py:47 #, python-format msgid "%(count)d document added to favorites." -msgstr "" +msgstr "%(count)d документ е добавен към любими." #: views/favorite_document_views.py:50 #, python-format msgid "%(count)d documents added to favorites." -msgstr "" +msgstr "%(count)d документи добавени към любими." #: views/favorite_document_views.py:57 msgid "Add" @@ -1291,23 +1322,23 @@ msgstr "Добави" #: views/favorite_document_views.py:60 msgid "Add the selected document to favorites" msgid_plural "Add the selected documents to favorites" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Добавете избрания документ към любими" +msgstr[1] "Добавете избраните документи към любими" #: views/favorite_document_views.py:73 #, python-format msgid "Document \"%(instance)s\" is not in favorites." -msgstr "" +msgstr "Документът "%(instance)s" не е в любими." #: views/favorite_document_views.py:77 #, python-format msgid "%(count)d document removed from favorites." -msgstr "" +msgstr " %(count)d документ е премахнат от любимите." #: views/favorite_document_views.py:80 #, python-format msgid "%(count)d documents removed from favorites." -msgstr "" +msgstr "%(count)d документи премахнати от любими." #: views/favorite_document_views.py:87 msgid "Remove" @@ -1316,93 +1347,77 @@ msgstr "Премахнете" #: views/favorite_document_views.py:90 msgid "Remove the selected document from favorites" 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 "" +msgstr[0] "Премахнете избрания документ от любимите" +msgstr[1] "Премахнете избраните документи от любими" #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." -msgstr "" +msgstr " %(count)d документ бе преместен в кошчето." #: views/trashed_document_views.py:42 #, python-format msgid "%(count)d documents moved to the trash." -msgstr "" +msgstr "%(count)d документи бяха преместени в кошчето." #: views/trashed_document_views.py:50 msgid "Move the selected document to the trash?" msgid_plural "Move the selected documents to the trash?" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Преместване на избрания документ в кошчето?" +msgstr[1] "Преместване на избраните документи в кошчето?" #: views/trashed_document_views.py:64 msgid "Empty trash?" -msgstr "" +msgstr "Да изпразня ли кошчето?" #: views/trashed_document_views.py:78 msgid "Trash emptied successfully" -msgstr "" +msgstr "Кошчето беше изпразнено успешно" #: views/trashed_document_views.py:87 #, python-format msgid "%(count)d trashed document deleted." -msgstr "" +msgstr "%(count)d изхвърлен документ е изтрит." #: views/trashed_document_views.py:90 #, python-format msgid "%(count)d trashed documents deleted." -msgstr "" +msgstr "%(count)d изхвърлени документи са изтрити." #: views/trashed_document_views.py:98 msgid "Delete the selected trashed document?" msgid_plural "Delete the selected trashed documents?" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Да се изтрие ли избраният изтрит документ?" +msgstr[1] "Да се изтрият ли избраните изхвърлени документи?" #: views/trashed_document_views.py:129 msgid "" "To avoid loss of data, documents are not deleted instantly. First, they are " "placed in the trash can. From here they can be then finally deleted or " "restored." -msgstr "" +msgstr "За да се избегне загуба на данни, документите не се изтриват моментално. Първо, те се поставят в кошчето. Оттук те могат да бъдат окончателно изтрити или възстановени." #: views/trashed_document_views.py:134 msgid "There are no documents in the trash can" -msgstr "" +msgstr "В кошчето няма документи" #: views/trashed_document_views.py:147 #, python-format msgid "%(count)d trashed document restored." -msgstr "" +msgstr "%(count)d изхвърлен документ е възстановен." #: views/trashed_document_views.py:150 #, python-format msgid "%(count)d trashed documents restored." -msgstr "" +msgstr "%(count)d изхвърлени документи са възстановени." #: views/trashed_document_views.py:158 msgid "Restore the selected trashed document?" msgid_plural "Restore the selected trashed documents?" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Възстановяване на избрания изтрит документ?" +msgstr[1] "Да се възстановят ли избраните изхвърлени документи?" #: widgets.py:81 widgets.py:85 #, python-format msgid "Pages: %d" -msgstr "" +msgstr "Страници: %d" 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 4e43a9f7e3..ea5b05fe74 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Thumbnail" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Stranice" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikati" -#: apps.py:284 +#: 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" @@ -149,62 +155,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Naziv kompresovane datoteke koji sadrži dokumente koji su za download, ako je ova opcija odabrana." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Brzo preimenuj dokument" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Sačuvaj produžetak" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Datum dodavanja" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Jezik" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Mimetype datoteke" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Nijedno" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Kodiranje datoteka" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Veličina datoteke" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Postoji u pohrani" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Svi dokumenti" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Download dokumenata" @@ -746,187 +747,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Januar" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Februar" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "Mart" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "April" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Maj" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "Jun" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Juli" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "Avgust" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "Septembar" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Oktobar" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "Novembar" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "Decembar" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Novi dokumenti mesečno" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nove verzije dokumenta mesečno" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nove stranice dokumenta mesečno" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Ukupni dokumenti svakog meseca" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Ukupne verzije dokumenata svakog meseca" -#: statistics.py:272 +#: 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" @@ -1053,220 +1070,235 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "Brze etikete za tip dokumenta: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Preuzmite verziju dokumenta" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Verzije dokumenta: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Sve naknadne verzije nakon ove će također biti obrisane." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Vratite se na ovu verziju?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Verzija dokumenta uspješno vraćena" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Greška pri vraćanju verzije dokumenta; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "Pregled verzije dokumenta: %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Promeni" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "Promijenite vrstu dokumenta: %s" -#: views/document_views.py:151 +#: views/document_views.py:153 #, 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:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Izmenite svojstva dokumenta: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Pregled dokumenta: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Osobine za dokument: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "Transformacije su uspešno klonirane." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Podnijeti" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "Štampa: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 8612e53ad0..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 2a8f4e0fa9..46338bc3df 100644 --- a/mayan/apps/documents/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/cs/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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" @@ -17,920 +18,923 @@ 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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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 "" +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 "" +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 "" +msgstr "Komentáře k verzím" -#: apps.py:155 +#: apps.py:175 msgid "Versions encoding" -msgstr "" +msgstr "Verze kódování" -#: apps.py:159 +#: apps.py:179 msgid "Versions mime type" -msgstr "" +msgstr "Verze mime type" -#: apps.py:163 +#: apps.py:183 msgid "Versions timestamp" -msgstr "" +msgstr "Časová značka verzí" -#: apps.py:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" -msgstr "" +msgstr "Náhled" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" -msgstr "" +msgstr "Strany" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" -msgstr "" +msgstr "Duplikáty" -#: apps.py:284 +#: apps.py:313 msgid "Type" -msgstr "" +msgstr "Typ" #: dashboard_widgets.py:24 msgid "Total pages" -msgstr "" +msgstr "Počet stran" #: dashboard_widgets.py:47 msgid "Total documents" -msgstr "" +msgstr "Celkem dokumentů" #: dashboard_widgets.py:66 views/trashed_document_views.py:136 msgid "Documents in trash" -msgstr "" +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 "" +msgstr "Typy dokumentů" #: dashboard_widgets.py:104 msgid "New documents this month" -msgstr "" +msgstr "Nové dokumenty tento měsíc" #: dashboard_widgets.py:118 msgid "New pages this month" -msgstr "" +msgstr "Nové stránky tento měsíc" #: events.py:10 msgid "Document created" -msgstr "" +msgstr "Dokument byl vytvořen" #: events.py:13 msgid "Document downloaded" -msgstr "" +msgstr "Dokument stažen" #: events.py:16 msgid "New version uploaded" -msgstr "" +msgstr "Nová verze byla nahrána" #: events.py:19 msgid "Document properties edited" +msgstr "Vlastnosti dokumentu byly upraveny" + +#: events.py:22 +msgid "Document trashed" msgstr "" -#: events.py:23 +#: events.py:26 msgid "Document type changed" -msgstr "" +msgstr "Typ dokumentu se změnil" -#: events.py:27 +#: events.py:30 msgid "Document type created" -msgstr "" - -#: events.py:31 -msgid "Document type edited" -msgstr "" +msgstr "Typ dokumentu byl vytvořen" #: events.py:34 -msgid "Document version reverted" -msgstr "" +msgid "Document type edited" +msgstr "Typ dokumentu byl upraven" #: events.py:37 +msgid "Document version reverted" +msgstr "Dokument se vrátil k předchozí verzi" + +#: events.py:40 msgid "Document viewed" -msgstr "" +msgstr "Dokument zobrazen" #: forms/document_forms.py:26 msgid "Compress" -msgstr "" +msgstr "Komprimovat" #: forms/document_forms.py:28 msgid "" "Download the document in the original format or in a compressed manner. This" " option is selectable only when downloading one document, for multiple " "documents, the bundle will always be downloads as a compressed file." -msgstr "" +msgstr "Stáhněte dokument v původním formátu nebo komprimovaným způsobem. Tuto možnost lze vybrat pouze při stahování jednoho dokumentu, u více dokumentů bude svazek vždy stahován jako komprimovaný soubor." #: forms/document_forms.py:35 msgid "Compressed filename" -msgstr "" +msgstr "Komprimovaný název souboru" #: forms/document_forms.py:38 msgid "" "The filename of the compressed file that will contain the documents to be " "downloaded, if the previous option is selected." -msgstr "" +msgstr "Název komprimovaného souboru, který bude obsahovat dokumenty ke stažení, pokud je vybrána předchozí možnost." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" -msgstr "" +msgstr "Rychlé přejmenování dokumentu" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" -msgstr "" +msgstr "Zachovat rozšíření" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." -msgstr "" +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 dokument otevřely správně." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" -msgstr "" +msgstr "Datum přidání" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" -msgstr "" +msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" -msgstr "" +msgstr "Jazyk" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" -msgstr "" +msgstr "Mimetyp souboru" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" -msgstr "" +msgstr "žádný" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" -msgstr "" +msgstr "Kódování souborů" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" -msgstr "" - -#: forms/document_forms.py:176 -msgid "Exists in storage" -msgstr "" +msgstr "Velikost souboru" #: forms/document_forms.py:178 -msgid "File path in storage" -msgstr "" +msgid "Exists in storage" +msgstr "Existuje v úložišti" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:180 +msgid "File path in storage" +msgstr "Cesta k souboru v úložišti" + +#: forms/document_forms.py:183 models/document_version_models.py:104 #: search.py:47 search.py:72 msgid "Checksum" -msgstr "" +msgstr "Kontrolní součet" -#: forms/document_forms.py:198 literals.py:40 +#: forms/document_forms.py:200 literals.py:43 msgid "Page range" -msgstr "" +msgstr "Rozsah stran" #: forms/document_page_forms.py:29 msgid "" "Page number from which all the transformations will be cloned. Existing " "transformations will be lost." -msgstr "" +msgstr "Číslo stránky, ze kterého budou klonovány všechny transformace. Stávající transformace budou ztraceny." #: forms/document_type_forms.py:42 models/document_models.py:45 #: models/document_type_models.py:60 models/document_type_models.py:146 #: search.py:35 search.py:59 msgid "Document type" -msgstr "" +msgstr "Typ dokumentu" #: forms/document_version_forms.py:17 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open the downloaded " "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." + +#: handlers.py:33 +msgid "Document images" msgstr "" -#: links.py:66 -msgid "Preview" -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 "" +msgstr "Vymazání transformací" -#: links.py:99 +#: links/document_links.py:30 msgid "Clone transformations" -msgstr "" +msgstr "Klonování transformací" -#: links.py:106 links.py:189 links.py:365 links.py:389 +#: links/document_links.py:36 links/document_links.py:71 +msgid "Change type" +msgstr "Změnit typ" + +#: links/document_links.py:42 links/document_links.py:77 +msgid "Advanced download" +msgstr "Pokročilé stahování" + +#: links/document_links.py:49 +msgid "Edit properties" +msgstr "Upravit vlastnosti" + +#: links/document_links.py:53 views/document_views.py:97 +msgid "All documents" +msgstr "Všechny dokumenty" + +#: links/document_links.py:57 views/document_views.py:608 +msgid "Recently accessed" +msgstr "Nedávno otevřeno" + +#: links/document_links.py:61 views/document_views.py:634 +msgid "Recently added" +msgstr "Nedávno přidané" + +#: links/document_links.py:84 +msgid "Preview" +msgstr "Náhled" + +#: links/document_links.py:90 +msgid "Properties" +msgstr "Vlastnosti" + +#: links/document_links.py:96 +msgid "Print" +msgstr "Tisk" + +#: links/document_links.py:101 +msgid "Quick download" +msgstr "Rychlé stažení" + +#: links/document_type_links.py:20 views/document_type_views.py:90 +msgid "Create document type" +msgstr "Vytvořit dokument typu" + +#: 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.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 -msgid "Change type" -msgstr "" - -#: links.py:148 links.py:209 -msgid "Advanced download" -msgstr "" - -#: links.py:155 -msgid "Print" -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 "Detail" - -#: links.py:251 views/document_views.py:95 -msgid "All documents" -msgstr "" - -#: links.py:255 views/document_views.py:712 -msgid "Recently accessed" -msgstr "" - -#: links.py:259 views/document_views.py:738 -msgid "Recently added" -msgstr "" - -#: links.py:264 -msgid "Trash can" -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 -msgid "Create document type" -msgstr "" - -#: links.py:371 +#: links/document_type_links.py:31 msgid "Deletion policies" -msgstr "" +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 "" +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/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.py:415 models/misc_models.py:38 models/misc_models.py:48 -#: views/document_views.py:690 +#: 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 "" +msgstr "Duplicitní dokumenty" -#: links.py:426 queues.py:70 +#: links/duplicated_document_links.py:24 queues.py:66 msgid "Duplicated document scan" -msgstr "" +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 "" +msgstr "Výchozí" -#: literals.py:40 +#: literals.py:43 msgid "All pages" -msgstr "" +msgstr "Všechny strany" #: models/document_models.py:39 msgid "" "UUID of a document, universally Unique ID. An unique identifier generated " "for each document." -msgstr "" +msgstr "UUID dokumentu, univerzálně jedinečné ID. Jedinečný identifikátor vygenerovaný pro každý dokument." #: models/document_models.py:49 msgid "The name of the document." -msgstr "" +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" -msgstr "Označení" +msgstr "Jmenovky" #: models/document_models.py:53 msgid "An optional short text describing a document." -msgstr "" +msgstr "Volitelný krátký text popisující dokument." #: models/document_models.py:54 search.py:41 search.py:69 msgid "Description" -msgstr "" +msgstr "Popis" #: models/document_models.py:58 msgid "" "The server date and time when the document was finally processed and added " "to the system." -msgstr "" +msgstr "Datum a čas serveru, kdy byl dokument nakonec zpracován a přidán do systému." #: models/document_models.py:60 models/misc_models.py:41 msgid "Added" -msgstr "" +msgstr "Přidáno" #: models/document_models.py:64 msgid "The dominant language in the document." -msgstr "" +msgstr "Dominantní jazyk v dokumentu." #: models/document_models.py:69 msgid "Whether or not this document is in the trash." -msgstr "" +msgstr "Je tento dokument v koši, či není?" #: models/document_models.py:70 msgid "In trash?" -msgstr "" +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 "" +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 "" +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 "" +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 "" +msgstr "Je to útržek?" -#: models/document_models.py:97 +#: models/document_models.py:96 #, python-format msgid "Document stub, id: %d" -msgstr "" +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 "" +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 "" +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 "" +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 "" +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 "" - -#: 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 "" +msgstr "Strana %(page_num)d z %(total_pages)d z %(document)s" #: models/document_type_models.py:31 msgid "The name of the document type." -msgstr "" +msgstr "Název typu dokumentu." #: models/document_type_models.py:36 msgid "" "Amount of time after which documents of this type will be moved to the " "trash." -msgstr "" +msgstr "Doba, po které budou dokumenty tohoto typu přesunuty do koše." #: models/document_type_models.py:38 msgid "Trash time period" -msgstr "" +msgstr "Časová perioda koše" #: models/document_type_models.py:42 msgid "Trash time unit" -msgstr "" +msgstr "Časová jednotka koše" #: models/document_type_models.py:46 msgid "" "Amount of time after which documents of this type in the trash will be " "deleted." -msgstr "" +msgstr "Doba, po které budou dokumenty tohoto typu z koše odstraněny." #: models/document_type_models.py:48 msgid "Delete time period" -msgstr "" +msgstr "Časová perioda smazání" #: models/document_type_models.py:53 msgid "Delete time unit" -msgstr "" +msgstr "Čsová jednotka smazání" #: models/document_type_models.py:61 msgid "Documents types" -msgstr "" - -#: models/document_type_models.py:151 -msgid "Enabled" -msgstr "" +msgstr "Typy dokumentů" #: models/document_type_models.py:156 msgid "Quick label" -msgstr "" +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 "" +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 "" +msgstr "Časové razítko" + +#: 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:77 +msgid "Comment" +msgstr "Komentář" #: models/document_version_models.py:83 -msgid "An optional short text describing the document version." -msgstr "" - -#: models/document_version_models.py:84 -msgid "Comment" -msgstr "" - -#: models/document_version_models.py:90 msgid "File" -msgstr "" +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 "" +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 "" +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 "" +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 "" +msgstr "Kódování" #: models/misc_models.py:47 msgid "Duplicated document" -msgstr "" +msgstr "Duplikovaný dokument" #: models/misc_models.py:61 models/misc_models.py:90 msgid "User" -msgstr "" +msgstr "Uživatel" #: models/misc_models.py:71 msgid "Favorite document" -msgstr "" +msgstr "Oblíbený dokument" #: models/misc_models.py:72 msgid "Favorite documents" -msgstr "" +msgstr "Oblíbené dokumenty" #: models/misc_models.py:97 msgid "Accessed" -msgstr "" +msgstr "Přístupné" #: models/misc_models.py:104 msgid "Recent document" -msgstr "" +msgstr "Poslední dokument" #: models/misc_models.py:105 msgid "Recent documents" -msgstr "" +msgstr "Poslední dokumenty" #: permissions.py:10 msgid "Create documents" -msgstr "" +msgstr "Vytvořit dokumenty" #: permissions.py:13 msgid "Delete documents" -msgstr "" +msgstr "Odstranit dokumenty" #: permissions.py:16 msgid "Trash documents" -msgstr "" +msgstr "Dokumenty koše" -#: permissions.py:19 views/document_views.py:222 +#: permissions.py:19 views/document_views.py:205 msgid "Download documents" -msgstr "" +msgstr "Stáhněte si dokumenty" #: permissions.py:22 msgid "Edit documents" -msgstr "" +msgstr "Úpravy dokumentů" #: permissions.py:25 msgid "Create new document versions" -msgstr "" +msgstr "Vytvoř nové verze dokumentů" #: permissions.py:28 msgid "Edit document properties" -msgstr "" +msgstr "Upravit vlastnosti dokumentu" #: permissions.py:31 msgid "Print documents" -msgstr "" +msgstr "Tisk dokumentů" #: permissions.py:34 msgid "Restore trashed document" -msgstr "" +msgstr "Obnovit dokument z koše" #: permissions.py:37 msgid "Execute document modifying tools" -msgstr "" +msgstr "Spusťte nástroje pro úpravu dokumentů" #: permissions.py:40 msgid "Revert documents to a previous version" -msgstr "" +msgstr "Vrátit dokumenty do předchozí verze" #: permissions.py:44 msgid "View documents' versions list" -msgstr "" +msgstr "Zobrazit seznam verzí dokumentů" #: permissions.py:48 msgid "View documents" -msgstr "" +msgstr "Zobrazit dokumenty" #: permissions.py:59 msgid "Create document types" -msgstr "" +msgstr "Vytvoř typy dokumentů" #: permissions.py:62 msgid "Delete document types" -msgstr "" +msgstr "Odstraň typy dokumentů" #: permissions.py:65 msgid "Edit document types" -msgstr "" +msgstr "Úpravy typů dokumentů" #: permissions.py:68 msgid "View document types" -msgstr "" +msgstr "Zobrazit typy dokumentů" #: queues.py:17 msgid "Converter" -msgstr "" +msgstr "Konvertor" #: queues.py:20 msgid "Documents periodic" -msgstr "" +msgstr "Dokumenty periodické" #: queues.py:23 msgid "Uploads" -msgstr "" +msgstr "Nahrávání" #: queues.py:31 msgid "Generate document page image" -msgstr "" +msgstr "Vygenerujte obrázek stránky dokumentu" #: queues.py:36 msgid "Delete a document" -msgstr "" +msgstr "Odstranění dokumentu" #: queues.py:40 msgid "Clean empty duplicate lists" -msgstr "" +msgstr "Vyčistěte prázdné duplicitní seznamy" #: queues.py:45 msgid "Check document type delete periods" -msgstr "" +msgstr "Zkontrolovat periody odstranění typu dokumentu" #: queues.py:53 msgid "Check document type trash periods" -msgstr "" +msgstr "Zkontrolujte periody koše typu dokumentu" #: queues.py:59 msgid "Delete document stubs" -msgstr "" +msgstr "Odstranění útržků dokumentu" -#: queues.py:66 -msgid "Clear image cache" -msgstr "" +#: queues.py:71 +msgid "Update document page count" +msgstr "Aktualizujte počet stránek dokumentu" #: queues.py:75 -msgid "Update document page count" -msgstr "" +msgid "Upload new document version" +msgstr "Nahrajte novou verzi dokumentu" #: queues.py:79 -msgid "Upload new document version" -msgstr "" - -#: queues.py:83 msgid "Scan document duplicates" -msgstr "" +msgstr "Sken dplicitních dokumentů" -#: settings.py:19 +#: settings.py:26 msgid "" -"Path to the Storage subclass to use when storing the cached document image " -"files." -msgstr "" - -#: settings.py:28 -msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." +"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:42 +msgid "Arguments to pass to the DOCUMENT_CACHE_STORAGE_BACKEND." +msgstr "Argumenty k předání do DOCUMENT_CACHE_STORAGE_BACKEND." + +#: settings.py:48 +msgid "" "Disables the first cache tier which stores high resolution, non transformed " "versions of documents's pages." -msgstr "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" +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 "" - -#: settings.py:118 -msgid "Amount in degrees to rotate a document page per user interaction." -msgstr "" - -#: settings.py:124 -msgid "Path to the Storage subclass to use when storing document files." -msgstr "" +msgstr "Maximální počet nedávno vytvořených dokumentů k zobrazení." #: 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: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:145 msgid "Arguments to pass to the DOCUMENT_STORAGE_BACKEND." -msgstr "" +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 "" +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 "" +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 "" +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 "" +msgstr "Částka v procentech přiblížení nebo oddálení stránky dokumentu na interakci uživatele." -#: statistics.py:18 +#: statistics.py:17 msgid "January" -msgstr "" +msgstr "leden" -#: statistics.py:18 +#: statistics.py:17 msgid "February" -msgstr "" +msgstr "únor" -#: statistics.py:18 +#: statistics.py:17 msgid "March" -msgstr "" +msgstr "březen" -#: statistics.py:18 +#: statistics.py:17 msgid "April" -msgstr "" +msgstr "duben" + +#: statistics.py:17 +msgid "May" +msgstr "květen" #: statistics.py:18 -msgid "May" -msgstr "" - -#: statistics.py:19 msgid "June" -msgstr "" +msgstr "červen" -#: statistics.py:19 +#: statistics.py:18 msgid "July" -msgstr "" +msgstr "červenec" -#: statistics.py:19 +#: statistics.py:18 msgid "August" -msgstr "" +msgstr "srpen" -#: statistics.py:19 +#: statistics.py:18 msgid "September" -msgstr "" +msgstr "září" + +#: statistics.py:18 +msgid "October" +msgstr "říjen" #: statistics.py:19 -msgid "October" -msgstr "" - -#: statistics.py:20 msgid "November" -msgstr "" +msgstr "listopad" -#: statistics.py:20 +#: statistics.py:19 msgid "December" -msgstr "" +msgstr "prosinec" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" -msgstr "" +msgstr "Nové dokumenty za měsíc" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" -msgstr "" +msgstr "Nové verze dokumentů za měsíc" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" -msgstr "" +msgstr "Nové stránky dokumentu za měsíc" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" -msgstr "" +msgstr "Celkem dokumentů za každý měsíc" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" -msgstr "" +msgstr "Celkem verze dokumentů v každém měsíci" -#: statistics.py:272 +#: statistics.py:275 msgid "Total document pages at each month" -msgstr "" +msgstr "Celkový počet stránek dokumentu v každém měsíci" #: templates/documents/document_print.html:12 msgid "Document page image preview" -msgstr "" +msgstr "Náhled obrázku strany dokumentu" #: templates/documents/forms/widgets/document_page_carousel.html:16 #, python-format @@ -938,55 +942,71 @@ msgid "" "\n" " Page %(page_number)s of %(total_pages)s\n" " " -msgstr "" +msgstr "\nStrana %(page_number)s z %(total_pages)s" #: templates/documents/forms/widgets/document_page_carousel.html:22 msgid "No pages to display" -msgstr "" +msgstr "Žádné stránky k zobrazení" #: templates/documents/forms/widgets/document_page_image.html:13 msgid "Document image" -msgstr "" +msgstr "Obrázek dokumentu" -#: utils.py:18 +#: utils.py:26 #, python-format msgid "Unknown language \"%s\"" -msgstr "" +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 " "document page recalculation action to attempt to introspect the page count " "again." -msgstr "" +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 "" +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 "" +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 "" +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 "" +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 "" +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" -msgstr "" +msgstr "Dokumenty typu: %s" #: views/document_type_views.py:71 msgid "" @@ -994,301 +1014,316 @@ msgid "" "system will depend on them. Define a document type for each type of physical" " document you intend to upload. Example document types: invoice, receipt, " "manual, prescription, balance sheet." -msgstr "" +msgstr "Typy dokumentů jsou nejzákladnější konfigurační jednotky. Vše v systému bude záviset na nich. Definujte typ dokumentu pro každý typ fyzického dokumentu, který chcete odeslat. Příklady typů dokumentů: faktura, účtenka, příručka, předpis, rozvaha." #: views/document_type_views.py:77 msgid "No document types available" -msgstr "" +msgstr "Nejsou k dispozici žádné typy dokumentů" #: views/document_type_views.py:106 msgid "All documents of this type will be deleted too." -msgstr "" +msgstr "Všechny dokumenty tohoto typu budou také smazány." #: views/document_type_views.py:108 #, python-format msgid "Delete the document type: %s?" -msgstr "" +msgstr "Odstranit typ dokumentu: %s?" #: views/document_type_views.py:125 #, python-format msgid "Deletion policies for document type: %s" -msgstr "" +msgstr "Zásady mazání pro typ dokumentu: %s" #: views/document_type_views.py:144 #, python-format msgid "Edit document type: %s" -msgstr "" +msgstr "Upravit typ dokumentu: %s" #: views/document_type_views.py:167 #, python-format msgid "Create quick label for document type: %s" -msgstr "" +msgstr "Vytvořte rychlou jmenovku pro typ dokumentu: %s" #: views/document_type_views.py:186 #, python-format msgid "" "Delete the quick label: %(label)s, from document type \"%(document_type)s\"?" -msgstr "" +msgstr "Odstranit rychlou jmenovku: %(label)s, z typu dokumentu „%(document_type)s“?" #: views/document_type_views.py:215 #, python-format msgid "Edit quick label \"%(filename)s\" from document type \"%(document_type)s\"" -msgstr "" +msgstr "Upravit rychlou jmenovku „%(filename)s“ z typu dokumentu „%(document_type)s“" #: views/document_type_views.py:253 msgid "" "Quick labels are predetermined filenames that allow the quick renaming of " "documents as they are uploaded by selecting them from a list. Quick labels " "can also be used after the documents have been uploaded." -msgstr "" +msgstr "Rychlé jmenovky jsou předdefinované názvy souborů, které umožňují rychlé přejmenování dokumentů při jejich odesílání výběrem ze seznamu. Rychlé jmenovky lze použít také po nahrání dokumentů." #: views/document_type_views.py:259 msgid "There are no quick labels for this document type" -msgstr "" +msgstr "Pro tento typ dokumentu neexistují žádné rychlé jmenovky" #: views/document_type_views.py:262 #, python-format msgid "Quick labels for document type: %s" -msgstr "" +msgstr "Rychlé jmenovky pro typ dokumentu: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" -msgstr "" +msgstr "Stáhněte si verzi dokumentu" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" -msgstr "" +msgstr "Verze dokumentu: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." -msgstr "" +msgstr "Všechny pozdější verze po této budou také smazány." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" -msgstr "" +msgstr "Vrátit se k této verzi?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" -msgstr "" +msgstr "Verze dokumentu byla úspěšně vrácena" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" -msgstr "" +msgstr "Při vrácení verze dokumentu došlo k chybě; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" -msgstr "" +msgstr "Náhled verze dokumentu: %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." -msgstr "" +msgstr "Chyba při načítání seznamu dokumentů: %(exception)s." -#: views/document_views.py:90 +#: views/document_views.py:92 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 "" +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:96 msgid "No documents available" -msgstr "" +msgstr "Nejsou k dispozici žádné dokumenty" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" -msgstr "" +msgstr "Žádost o změnu typu dokumentu provedená v dokumentu %(count)d" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" -msgstr "" - -#: views/document_views.py:117 -msgid "Change" -msgstr "" +msgstr "Žádost o změnu typu dokumentu provedená na dokumentech %(count)d" #: views/document_views.py:119 +msgid "Change" +msgstr "Změna" + +#: views/document_views.py:121 msgid "Change the type of the selected document" msgid_plural "Change the type of the selected documents" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Změňte typ vybraného dokumentu" +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:132 #, python-format msgid "Change the type of the document: %s" -msgstr "" +msgstr "Změňte typ dokumentu: %s" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." -msgstr "" +msgstr "Typ dokumentu pro "%s" byl úspěšně změněn." -#: views/document_views.py:220 +#: views/document_views.py:203 msgid "Download" -msgstr "" +msgstr "Stažení" -#: 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 +#: views/document_views.py:295 #, python-format -msgid "Duplicates for document: %s" -msgstr "" +msgid "Edit properties of document: %s" +msgstr "Upravit vlastnosti dokumentu: %s" + +#: views/document_views.py:331 +#, python-format +msgid "Preview of document: %s" +msgstr "Náhled dokumentu: %s" + +#: views/document_views.py:349 +#, python-format +msgid "Properties for document: %s" +msgstr "Vlastnosti dokumentu: %s" + +#: views/document_views.py:357 +#, 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:360 +#, 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:368 +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?" +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:379 #, python-format -msgid "Edit properties of document: %s" -msgstr "" - -#: views/document_views.py:415 -#, python-format -msgid "Preview of document: %s" -msgstr "" - -#: views/document_views.py:433 -#, python-format -msgid "Properties for document: %s" -msgstr "" - -#: views/document_views.py:441 -#, python-format -msgid "%(count)d document queued for page count recalculation" -msgstr "" - -#: views/document_views.py:444 -#, python-format -msgid "%(count)d documents queued for page count recalculation" -msgstr "" - -#: views/document_views.py:452 -msgid "Recalculate the page count of the selected document?" -msgid_plural "Recalculate the page count of the selected documents?" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: views/document_views.py:463 -#, python-format msgid "Recalculate the page count of the document: %s?" -msgstr "" +msgstr "Přepočítat počet stránek dokumentu: %s?" -#: views/document_views.py:479 +#: views/document_views.py:395 #, python-format msgid "" "Document \"%(document)s\" is empty. Upload at least one document version " "before attempting to detect the page count." -msgstr "" +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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" -msgstr "" +msgstr "Žádost o smazání transformací zpracovaná pro dokument %(count)d" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" -msgstr "" +msgstr "Žádost o smazání transformací zpracovaná pro dokumenty %(count)d" -#: views/document_views.py:503 +#: views/document_views.py:419 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] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Vymazat všechny transformace stránky pro vybraný dokument?" +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:430 #, python-format msgid "Clear all the page transformations for the document: %s?" -msgstr "" +msgstr "Vymazat všechny transformace stránky pro dokument: %s?" -#: views/document_views.py:529 views/document_views.py:557 +#: views/document_views.py:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." msgstr "" -#: views/document_views.py:565 +#: views/document_views.py:485 msgid "Transformations cloned successfully." -msgstr "" +msgstr "Transformace byly úspěšně klonovány." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" -msgstr "" +msgstr "Odeslat" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" -msgstr "" +msgstr "Klonování transformací stránky pro dokument: %s" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" -msgstr "" +msgstr "Tisk: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +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:606 +msgid "There are no recently accessed document" +msgstr "Neexistují žádné nedávno prohlédnuté dokumenty" + +#: views/document_views.py:628 +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:632 +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 "" +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 "" +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 "" +#: 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 "" - -#: 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 "Skenování duplicitních dokumentů bylo úspěšně zařazeno do fronty." #: views/favorite_document_views.py:33 #, python-format msgid "" "Favorited documents will be listed in this view. Up to %(count)d documents " "can be favorited per user. " -msgstr "" +msgstr "V tomto zobrazení budou uvedeny oblíbené dokumenty. Na uživatele může být upřednostněno až %(count)d." #: views/favorite_document_views.py:36 msgid "There are no favorited documents." -msgstr "" +msgstr "Nejsou žádné oblíbené dokumenty." #: views/favorite_document_views.py:47 #, python-format msgid "%(count)d document added to favorites." -msgstr "" +msgstr "dokument %(count)d byl přidán k oblíbeným." #: views/favorite_document_views.py:50 #, python-format msgid "%(count)d documents added to favorites." -msgstr "" +msgstr "%(count)d dokumenty přidané do oblíbených." #: views/favorite_document_views.py:57 msgid "Add" @@ -1297,25 +1332,25 @@ msgstr "Přidat" #: views/favorite_document_views.py:60 msgid "Add the selected document to favorites" msgid_plural "Add the selected documents to favorites" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Přidejte vybraný dokument k oblíbeným" +msgstr[1] "Přidejte vybrané dokumenty k oblíbeným" +msgstr[2] "Přidejte vybrané dokumenty k oblíbeným" +msgstr[3] "Přidejte vybrané dokumenty k oblíbeným" #: views/favorite_document_views.py:73 #, python-format msgid "Document \"%(instance)s\" is not in favorites." -msgstr "" +msgstr "Dokument "%(instance)s" není v oblíbených." #: views/favorite_document_views.py:77 #, python-format msgid "%(count)d document removed from favorites." -msgstr "" +msgstr "%(count)d dokument odstraněn z oblíbených." #: views/favorite_document_views.py:80 #, python-format msgid "%(count)d documents removed from favorites." -msgstr "" +msgstr "%(count)d dokumenty byly odebrány z oblíbených." #: views/favorite_document_views.py:87 msgid "Remove" @@ -1324,101 +1359,85 @@ msgstr "Odstranit" #: views/favorite_document_views.py:90 msgid "Remove the selected document from favorites" msgid_plural "Remove the selected documents from favorites" -msgstr[0] "" -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 "" +msgstr[0] "Odebrat vybraný dokument z oblíbených" +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/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." -msgstr "" +msgstr "Dokument %(count)d byl přesunut do koše." #: views/trashed_document_views.py:42 #, python-format msgid "%(count)d documents moved to the trash." -msgstr "" +msgstr "Dokumenty %(count)d byly přesunuty do koše." #: views/trashed_document_views.py:50 msgid "Move the selected document to the trash?" msgid_plural "Move the selected documents to the trash?" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Přesunout vybraný dokument do koše?" +msgstr[1] "Přesunout vybrané dokumenty do koše?" +msgstr[2] "Přesunout vybrané dokumenty do koše?" +msgstr[3] "Přesunout vybrané dokumenty do koše?" #: views/trashed_document_views.py:64 msgid "Empty trash?" -msgstr "" +msgstr "Vysypat koš?" #: views/trashed_document_views.py:78 msgid "Trash emptied successfully" -msgstr "" +msgstr "Koš se úspěšně vyprázdnil" #: views/trashed_document_views.py:87 #, python-format msgid "%(count)d trashed document deleted." -msgstr "" +msgstr "%(count)d dokument v koši byl smazán." #: views/trashed_document_views.py:90 #, python-format msgid "%(count)d trashed documents deleted." -msgstr "" +msgstr "%(count)d dokumenty v koši smazány." #: views/trashed_document_views.py:98 msgid "Delete the selected trashed document?" msgid_plural "Delete the selected trashed documents?" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Chcete smazat vybraný dokument v koši?" +msgstr[1] "Smazat vybrané koše?" +msgstr[2] "Smazat vybrané koše?" +msgstr[3] "Smazat vybrané dokumenty z koše?" #: views/trashed_document_views.py:129 msgid "" "To avoid loss of data, documents are not deleted instantly. First, they are " "placed in the trash can. From here they can be then finally deleted or " "restored." -msgstr "" +msgstr "Aby nedocházelo ke ztrátě dat, dokumenty se neodstraní okamžitě. Nejprve jsou umístěny do koše. Odtud mohou být nakonec odstraněny nebo obnoveny." #: views/trashed_document_views.py:134 msgid "There are no documents in the trash can" -msgstr "" +msgstr "V koši nejsou žádné dokumenty" #: views/trashed_document_views.py:147 #, python-format msgid "%(count)d trashed document restored." -msgstr "" +msgstr "%(count)d dokument byl obnoven z koše." #: views/trashed_document_views.py:150 #, python-format msgid "%(count)d trashed documents restored." -msgstr "" +msgstr "%(count)d dkumenty obnoveny z koše." #: views/trashed_document_views.py:158 msgid "Restore the selected trashed document?" msgid_plural "Restore the selected trashed documents?" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" +msgstr[0] "Obnovit vybraný dokument v koši?" +msgstr[1] "Obnovit vybrané koše?" +msgstr[2] "Obnovit vybrané koše?" +msgstr[3] "Obnovit vybrané dokumenty z koše?" #: widgets.py:81 widgets.py:85 #, python-format msgid "Pages: %d" -msgstr "" +msgstr "Strany: %d" 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 e73e487cae..edd922d3ad 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Sider" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:284 +#: 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 "" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "" -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Sprog" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Ingen" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Filstørrelse" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "Alle dokumenter" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Download dokumenter" @@ -745,187 +746,189 @@ 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 "" -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Januar" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Februar" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "Marts" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "April" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Maj" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "Juni" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Juli" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "August" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "September" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Oktober" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "November" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "December" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Nye dokumenter pr måned" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nye dokumentversioner pr måned" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nye dokumentsider pr måned" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Antal dokumenter for hver måned" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Antal dokumentversioner for hver måned" -#: statistics.py:272 +#: 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" @@ -1052,216 +1067,231 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Download dokumentversion" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Versioner af dokument: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Alle senere versioner efter denne vil også blive slettet." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "Skift" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "" -#: views/document_views.py:565 +#: views/document_views.py:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Indsend" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "Print %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 9afd549b4b..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 754e9ddef5..5997a14c6b 100644 --- a/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/de_DE/LC_MESSAGES/django.po @@ -6,6 +6,7 @@ # Berny , 2015-2016 # Felix , 2018 # Jesaja Everling , 2017 +# Marvin Haschker , 2019 # Mathias Behrle , 2015,2018 # Stefan Rempe, 2018 # Stefan Rempe, 2018 @@ -14,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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" @@ -24,51 +25,52 @@ msgstr "" "Language: de_DE\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: apps.py:109 apps.py:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniaturbild" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Seiten" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikate" -#: apps.py:284 +#: apps.py:313 msgid "Type" msgstr "Typ" @@ -84,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" @@ -113,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" @@ -154,62 +161,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Name der komprimierten Datei, die die Dokumente zum Download beeinhaltet, wenn die vorherige Option gewählt wurde." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Dokument schnell umbenennen" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Erweiterung beibehalten" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "Setzt die Dateierweiterung an das Ende des Dateinamens. Dies erlaubt es Betriebssystemen, die Dateierweiterungen für die Verarbeitung benötigen, das Dokument korrekt zu öffnen." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Hinzugefügt am" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Sprache" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Datei MIME Type" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Keine" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Dateikodierung" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Dateigröße" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Im Dateispeicher" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "Pfad im Dateispeicher" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 literals.py:43 msgid "Page range" msgstr "Seitenbereich" @@ -217,7 +224,7 @@ msgstr "Seitenbereich" msgid "" "Page number from which all the transformations will be cloned. Existing " "transformations will be lost." -msgstr "" +msgstr "Seitenzahl von der alle Transformationen übernommen werden. Bestehende Transformationen gehen verloren." #: forms/document_type_forms.py:42 models/document_models.py:45 #: models/document_type_models.py:60 models/document_type_models.py:146 @@ -232,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:97 msgid "All documents" msgstr "Alle Dokumente" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "Kürzlich abgerufen" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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" @@ -429,13 +448,13 @@ msgstr "Alle Seiten" msgid "" "UUID of a document, universally Unique ID. An unique identifier generated " "for each document." -msgstr "" +msgstr "UUID des Dokuments. Eine eindeutige Identifikation für jedes Dokument." #: models/document_models.py:49 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" @@ -471,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." @@ -570,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" @@ -659,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:205 msgid "Download documents" msgstr "Dokumente herunterladen" @@ -751,193 +753,195 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Januar" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Februar" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "März" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "April" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Mai" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "Juni" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Juli" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "August" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "September" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Oktober" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "November" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "Dezember" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Neue Dokumente pro Monat" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Neue Dokumentenversionen pro Monat" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Neue Dokumentenseiten pro Monat" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Summe der Dokumente im Monat" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Summe der Dokumentenversionen im Monat" -#: statistics.py:272 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Summe der Dokumentenseiten im Monat" #: templates/documents/document_print.html:12 msgid "Document page image preview" -msgstr "" +msgstr "Dokumentenseitenbild" #: templates/documents/forms/widgets/document_page_carousel.html:16 #, python-format @@ -953,14 +957,14 @@ msgstr "Keine Seiten für die Anzeige vorhanden" #: templates/documents/forms/widgets/document_page_image.html:13 msgid "Document image" -msgstr "" +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 " @@ -968,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" @@ -1058,217 +1074,232 @@ msgstr "Keine Schnellbezeichner für diesen Dokumententyp vorhanden" msgid "Quick labels for document type: %s" msgstr "Schnellbezeichner für Dokumententyp %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Dokumentenversion herunterladen" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Versionen von Dokument %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Alle späteren Versionen dieses Dokuments werden ebenfalls gelöscht." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Diese Dokumentenversion wiederherstellen?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Dokument wurde erfolgreich wiederhergestellt" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Fehler beim Wiederherstellen der Dokumentenversion %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "Vorschau von Dokumentenversion %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, 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:92 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:96 msgid "No documents available" msgstr "Keine Dokumente vorhanden" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Ändern" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, 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:153 #, 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:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Eigenschaften von Dokument \"%s\" bearbeiten" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Vorschau von Dokument %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Eigenschaften von Dokument %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "Transformationen erfolgreich kopiert." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Ändern" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "%s drucken" -#: views/document_views.py:681 +#: views/document_views.py:602 +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:606 +msgid "There are no recently accessed document" +msgstr "Keine zuletzt benutzten Dokumente vorhanden" + +#: views/document_views.py:628 +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:632 +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 @@ -1326,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 b622716bac..064d917465 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Μικρογραφία" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Σελίδες" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Αντίγραφα" -#: apps.py:284 +#: 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 "Παρουσιάσεις εγγράφων" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Το όνομα του συμπιεσμένου αρχείου που θα περιέχει τα έγγραφα που επιλέχθηκαν για κατέβασμα, αν η επιλογή για συμπίεση είναι ενεργή. " -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Γρήγορη μετονομασία εγγράφων" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Διατήρηση επέκτασης αρχείου" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Ημερομηνία προσθήκης" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "Μοναδικό αναγνωριστικό" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Γλώσσα" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Τύπος ΜΙΜΕ του αρχείου" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Κανένα" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Κωδικοποίηση του αρχείου" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Μέγεθος του αρχείου" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Υπάρχει στον χώρο αποθήκευσης" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "Διαδρομή αρχείου στον χώρο αποθήκευσης" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "Όλα τα έγγραφα" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Κατέβασμα εγγράφων" @@ -745,187 +746,189 @@ 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 "Βαθμός μεγένθυνσης / σμύκρινσης σε μια σελίδα εγγράφου ανά χρήστη." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Νέα έγγραφα τον μήνα" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Νέες εκδόσεις εγγράφων τον μήνα" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Νέες σελίδες εγγράφων τον μήνα" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Σϋνολο εγγράφων κάθε μήνα" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Σύνολο εκδόσεων εγγράφων κάθε μήνα" -#: statistics.py:272 +#: 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" @@ -1052,217 +1067,232 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "Γρήγορες ετικέτες για τον τύπο εγγράφων: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Κατέβασμα έκδοσης εγγράφου" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Εκδόσεις του εγγράφου: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Όλες οι μεταγενέστερες εκδόσεις θα διαγραφούν." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Επαναφορά σε αυτή την έκδοση;" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Επαναφορά στην επιλεγμένη έκδοση πργματοποιήθηκε επιτυχώς" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Σφάλμα κατά την επαναφορά στην έκδοση εγγράφου, %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "Προεπισκόπηση της έκδοσης εγγράφου: %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "Πραγματοποιήθηκε αλλαγή τύπου εγγράφου για %(count)d έγραφο" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "Πραγματοποιήθηκε αλλαγή τύπου εγγράφου για %(count)d έγραφα" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "Αλλαγή" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "Αλλαγή τύπου του εγγράφου: %s" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Αλλαγή τύπου εγγράφου για το \"%s\" πραγματοποιήθηκε με επιτυχία." -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Τροποποίηση ιδιοτήτων του εγγράφου: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Προεπισκόπηση του εγγράφου: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Ιδιότητες για το έγγραφο: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d έγγραφο στην λίστα για επανυπολογισμό αριθμού σελίδων" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d έγγραφα στην λίστα για επανυπολογισμό αριθμού σελίδων" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "Επανυπολογισμός του αριθμού σελίδων του εγγράφου: %s;" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "Αίτημα καθαρισμού μετασχηματισμών ολοκληρώθηκε για %(count)d έγγραφο" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "Αίτημα καθαρισμού μετασχηματισμών ολοκληρώθηκε για %(count)d έγγραφα" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "Ο μετασχηματισμός αντιγράφτηκε με επιτυχία." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Υποβολή" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "Αντιγραφή μετασχηματισμών σελίδας για το έγγραφο: %s" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "Εκτύπωση: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 4ac7d99220..e65496bd36 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-09-24 23:11-0400\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 models/document_models.py:94 -#: permissions.py:7 queues.py:26 settings.py:14 statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:284 +#: 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 "" @@ -147,62 +153,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "" -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "" @@ -743,187 +744,189 @@ 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 "" -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:272 +#: 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" @@ -1050,216 +1065,230 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "" -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "" -#: views/document_views.py:565 +#: views/document_views.py:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; %(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by " +"this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 bf333c081f..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 1c12051d27..a28662dace 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 21:06+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Foto miniatura" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Páginas" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplicados" -#: apps.py:284 +#: 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" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "El nombre del archivo comprimido que va a contener los documentos a descargar, si la opción anterior está activada." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Cambio rápido de nombre" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Preservar la extensión" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "Toma la extensión de archivo y la mueve al final del nombre de archivo, lo que permite que los sistemas operativos que dependen de las extensiones de archivo abran el documento correctamente." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Fecha en que se agregó" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Lenguaje" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Tipo MIME del archivo" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Ninguno" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Codificación de archivo" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Tamaño del archivo" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Existe en el almacenamiento" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Todos los documentos" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "Recientemente accedido" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Descargar documentos" @@ -745,187 +746,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Enero" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Febrero" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "Marzo" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "Abril" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Mayo" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "Junio" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Julio" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "Agosto" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "Septiembre" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Octubre" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "Noviembre" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "Diciembre" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Nuevos documentos por mes" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nuevas versiones de documentos por mes" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nuevas páginas de documentos por mes" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Total de documentos cada mes" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Total de versiones de documentos cada mes" -#: statistics.py:272 +#: 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" @@ -1052,217 +1067,232 @@ msgstr "No hay etiquetas rápidas para este tipo de documento" msgid "Quick labels for document type: %s" msgstr "Nombre típicos para el tipo de documento: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Descargar la versión del documento" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Versiones del documento: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "También se borrarán todas las versiones más recientes a esta." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "¿Revertir a esta versión?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Versión de documento revertida con éxito." -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Error revirtiendo la versión del documento; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format 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:71 #, 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:92 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:96 msgid "No documents available" msgstr "No hay documentos disponibles" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Cambiar" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, 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:153 #, 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:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Editar propiedades del documento: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Visualización del documento: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Propiedades para el documento: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, 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:485 msgid "Transformations cloned successfully." msgstr "Transformaciones clonadas con éxito." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Enviar" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "Imprimir: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +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:606 +msgid "There are no recently accessed document" +msgstr "No hay documentos accedidos recientemente" + +#: views/document_views.py:628 +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:632 +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 "Caché de documentos borrara 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 daa3beca29..77d32da096 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "اندازه کوچک" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "صفحات" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "تکراری" -#: apps.py:284 +#: 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 "سند مشاهده شده" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "اگر انتخاب قبلی انجام شده، نام فایل فشرده شده که شامل کلیه فایلهای که قراراست که دانلود شوند." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "نامگذاری سریع سند " -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "حفظ فرمت" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "تاریخ اضافه شدن" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "زبان" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "File mimetype" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "هیچکدام." -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "فایل Encoding" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "اندازه فایل" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "موجود در مخزن" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "آدرس فایل در مخزن" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "کلیه اسناد" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "دانلود اسناد" @@ -745,187 +746,189 @@ 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 "اندازه بزرگنمایی/کوچک نمایی یک صفحه از سند جهت تعامل با هرکاربر" -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "اسناد جدید در هر ماه" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "نسخه های جدید سند در هر ماه" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "صفحات سند جدید در هر ماه" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "مجموع اسناد در هر ماه" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "نسخه های سند کامل در هر ماه" -#: statistics.py:272 +#: 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" @@ -1052,217 +1067,232 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "برچسب های سریع برای نوع سند: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "نسخه سند را دانلود کنید" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "نسخ سند : %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "همجنین کلیه نسخه های بعد از این نسخه حذف خواهند گردید." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "بازگشت به این نسخه" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "بازگشت موفق نسخه سند." -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "خطا در بازگشت نسخه سند: %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "پیش نمایش نسخه سند: %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "درخواست تغییر نوع سند بر روی سند %(count)d انجام می شود" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "درخواست تغییر نوع سند بر روی اسناد %(count)d انجام می شود" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "تغییر دادن" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "نوع سند را تغییر دهید: %s" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "نوع سند برای \"%s\" با موفقیت تغییر یافت." -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "ویرایش خصوصیات سند : %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "پیش نمایش سند : %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "خصوصیات سند : %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d سند در محدوده شمارش تعداد صفحات" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d اسناد در محدوده شمارش شمارش صفحات" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "شمارش صفحه سند را محاسبه کنید: %s؟" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "درخواست واضح تر تبدیل شده برای سند %(count)d پردازش شده است" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "درخواست واضح تر تبدیل شده برای اسناد %(count)d پردازش شده است" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "تغییرات با موفقیت کلون شدند." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "ارسال" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "تبدیل صفحه کلون برای سند: %s" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "چاپ : %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 27448700ca..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 09663fea21..e96e6bc7b7 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Vignette" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Pages" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Doublons" -#: apps.py:284 +#: 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é" @@ -152,62 +159,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Le nom de fichier du fichier compressé qui contiendra les documents à télécharger, si l'option précédente est sélectionnée." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Renommage rapide du document" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Conserver l'extension" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "Prend l'extension de fichier et la déplace à la fin du nom de fichier, ce qui permet aux systèmes d'exploitation qui s'appuient sur des extensions de fichier d'ouvrir le document correctement." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Date d'ajout" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Langue" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Type MIME du fichier" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Aucun" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Encodage du fichier" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Taille du fichier" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Présent dans le stockage local" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Tous les documents" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 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:634 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:205 msgid "Download documents" msgstr "Télécharger les documents" @@ -749,193 +751,195 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Janvier" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Février" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "Mars" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "Avril" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Mai" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "Juin" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Juillet" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "Août" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "Septembre" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Octobre" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "Novembre" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "Décembre" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Nouveaux documents par mois" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nouvelles versions de document par mois" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nouvelles pages de documents par mois" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Nombre total de documents chaque mois" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Nombre total de versions de documents chaque mois" -#: statistics.py:272 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Nombre total de pages de documents chaque mois" #: templates/documents/document_print.html:12 msgid "Document page image preview" -msgstr "" +msgstr "Aperçu de l'image de la page du document" #: templates/documents/forms/widgets/document_page_carousel.html:16 #, python-format @@ -951,14 +955,14 @@ msgstr "Aucune page à afficher" #: templates/documents/forms/widgets/document_page_image.html:13 msgid "Document image" -msgstr "" +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" @@ -1056,217 +1072,232 @@ msgstr "Il n'y a pas d'étiquette rapide pour ce type de document" msgid "Quick labels for document type: %s" msgstr "Libellés rapides pour le type de document : %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Télécharger la version du document" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Versions du document : %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Toutes les versions postérieures à celle-ci seront également supprimées." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Êtes vous certain de vouloir revenir à cette version ?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Retour à la version précédente du document effectuée avec succès" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Erreur lors du retour à une version précédente du document ; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "Prévisualiser la version du document : %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, 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:92 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:96 msgid "No documents available" msgstr "Aucun document disponible" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Modifier" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, 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:153 #, 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:203 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:295 #, 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:331 #, python-format msgid "Preview of document: %s" msgstr "Aperçu du document : %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Propriétés du document : %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 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:501 views/document_views.py:574 msgid "Submit" msgstr "Soumettre" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "Imprimer : %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +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:606 +msgid "There are no recently accessed document" +msgstr "Il n'y a pas de document récemment consulté" + +#: views/document_views.py:628 +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:632 +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 f0c0cad236..c0b723effc 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "bélyegkép" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Lapok" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikátum" -#: apps.py:284 +#: 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" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "A tömörített fájl neve, amely a letöltött dokumentumokat tartalmazni fogja, ha az előző opció van kiválasztva." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Dokumentum gyors átnevezése" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Dátum megadása" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Nyelv" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Fájl MIME-típusa" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Semmi" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Állomány kódolás" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Fájl mérete" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Létezik a tárolóban" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Minden dokumentum" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Dokumentum letöltése" @@ -745,187 +746,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Új dokumentumok havonta" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Új dokumentum verziók havonta" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Új dokumentum oldalak havonta" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Dokumentumok számossága havonta" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Dokumentum verziók számossága havonta" -#: statistics.py:272 +#: 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" @@ -1052,216 +1067,231 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "Dokumentum típushoz tartozó gyorscímkék:%s " -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "%s dokumentum verziói" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Minden ezután következő verzió is törölve lesz." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Visszaáll erre a verzióra?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Dokumentum verzió sikeresen visszaállt" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Hiba a dokumentum verzió visszaállítása közben; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "Módosít" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 9dd5cceb0a..b860a0ef1a 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Halaman-halaman" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikat" -#: apps.py:284 +#: 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" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Nama berkas dari berkas terkompresi yang mengandung dokumen-dokumen yang akan diunduh, bila pilihan sebelumnya terpilih." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Cara cepat mengganti nama dokumen" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Ekstensi dipertahankan" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Tanggal ditambahkan" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Bahasa" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Jenis mime berkas" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Nihil" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Pengkodean berkas" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Ukuran berkas" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Ada di penyimpanan" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Semua dokumen" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "Baru saja diakses" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Unduh dokumen" @@ -745,187 +746,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:272 +#: 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" @@ -1052,213 +1065,228 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Semua versi sebelum versi yang ini akan ikut dihapus juga." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Versi dokumen berhasil dikembalikan." -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Masalah dalam mengembalikan versi dokumen; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 2c91f75f97..579143cb06 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniatura" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Pagine" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplicati" -#: apps.py:284 +#: 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" @@ -150,62 +156,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Il nome file del file compresso che conterrà il documento da scaricare, se l'opzione precedente è selezionata." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Rinomina del documento veloce" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Conserva l'estensione" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "Mette l'estensione del file alla fine del nome, consentendo ai sistemi operativi che tengono conto di ciò di aprire il file correttamente." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Data inserimento" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Lingua" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "File mimetype" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Nessuna " -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "File encoding" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Dimensioni del file" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Esiste nello storage" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Tutti i documenti" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "Consultati di recente" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Scarica documenti" @@ -747,187 +748,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Gennaio" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Febbraio" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "Marzo" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "Aprile" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Maggio" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "Giugno" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Luglio" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "Agosto" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "Settembre" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Ottobre" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "Novembre" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "Dicembre" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Nuovi documenti per mese" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nuove versioni dei documenti per mese" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nuove pagine di documento per mese" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Totale documenti per ogni mese" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Totale versioni di documento documento per ogni mese" -#: statistics.py:272 +#: 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" @@ -1054,216 +1069,231 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "Etichette rapide per il tipo documento: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Versione del documento: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Tutte le versioni precedenti a questa verranno cancellate." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Ripristinare questa versione?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Versione del documento ripristinato con successo" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Errore restituito, al ripristino del documento; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "Modifica" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, 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:153 #, 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:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Modifica le proprietà del documento: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Anteprima del documento: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Proprietà del documento: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "Clonazione delle trasformazioni completata." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Invia" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "Stampa: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +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:606 +msgid "There are no recently accessed document" +msgstr "Non ci sono documenti aperti di recente" + +#: views/document_views.py:628 +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:632 +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 0099238a20..6baaa5ac58 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Sīktēls" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Lapas" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Dublikāti" -#: apps.py:284 +#: 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" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Saspiestā faila nosaukums, kurā būs lejupielādējami dokumenti, ja ir izvēlēta iepriekšējā opcija." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Ātra dokumenta pārdēvēšana" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Saglabāt paplašinājumu" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "Veic faila paplašinājumu un pārvieto to līdz faila nosaukuma beigām, ļaujot operētājsistēmām, kas balstās uz failu paplašinājumiem, pareizi atvērt dokumentu." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Pievienošanas datums" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Valoda" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Fails mimetype" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Nav neviens" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Failu kodēšana" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Faila lielums" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Pastāv glabāšanā" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Visi dokumenti" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "Nesen piekļuva" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Lejupielādējiet dokumentus" @@ -745,187 +746,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Janvāris" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Februārī" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "Marts" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "Aprīlis" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Maijs" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "jūnijs" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Jūlijs" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "augusts" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "Septembris" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Oktobris" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "Novembris" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "Decembrī" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Jauni dokumenti mēnesī" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Jaunas dokumentu versijas mēnesī" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Jaunas dokumentu lapas mēnesī" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Kopējie dokumenti katru mēnesi" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Kopējais dokumentu skaits katrā mēnesī" -#: statistics.py:272 +#: 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" @@ -1052,220 +1069,235 @@ msgstr "Šim dokumenta tipam nav ātrās uzlīmes" msgid "Quick labels for document type: %s" msgstr "Ātrās uzlīmes dokumenta tipam: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Lejupielādējiet dokumenta versiju" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Dokumenta versijas: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Vēlākā versija pēc šīs versijas tiks izdzēsta arī." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Vai atgriezties pie šīs versijas?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Dokumenta versija ir veiksmīgi atjaunota" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Atgriežot dokumenta versiju, radās kļūda; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "Dokumenta versijas priekšskatījums: %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, 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:92 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:96 msgid "No documents available" msgstr "Nav pieejami dokumenti" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Mainīt" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "Mainiet dokumenta veidu: %s" -#: views/document_views.py:151 +#: views/document_views.py:153 #, 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:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Dokumenta rekvizītu rediģēšana: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Dokumenta priekšskatījums: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Dokumenta rekvizīti: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 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:501 views/document_views.py:574 msgid "Submit" msgstr "Iesniegt" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "Drukāt: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +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:606 +msgid "There are no recently accessed document" +msgstr "Pēdējā laikā nav pieejams dokuments" + +#: views/document_views.py:628 +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:632 +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 e61ba56ad7..41f054c1ba 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Thumbnail" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Pagina's" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:284 +#: 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" @@ -149,62 +155,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "De bestandsnaam van het gecomprimeerde archiefbestand dat alle documenten bevat die dienen te worden gedownload, als de voorgaande optie is geselecteerd." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Snel document hernoemen" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Datum toegevoegd" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Taal" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "MIME-type bestand" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Geen" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Bestand encoderen" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Bestandgrootte" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Aanwezig in opslag" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "Bestandspad in opslag" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "Alle documenten" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Documenten downloaden" @@ -746,187 +747,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Nieuwe documenten per maand" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nieuwe documentversies per maand" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nieuwe documentpagina's per maand" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:272 +#: 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" @@ -1053,216 +1068,231 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Versies van document: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Alle recentere versies na deze zullen ook worden verwijderd." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Deze versie terugzetten?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Documentversie succesvol teruggevoerd" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Fout bij het terugvoeren van de documentversie. Foutmelding: %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Documenttype voor \"%s\" succesvol veranderd." -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Bewerk eigenschappen van document: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Eigenschappen voor document: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Verstuur" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "Afdrukken: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 9a4a964f52..62c6e82bfc 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniaturka" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Strony" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplikaty" -#: apps.py:284 +#: 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" @@ -150,62 +156,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Nazwa pliku zawierającego gotowe do pobrania dokumenty w formie skompresowanej, jeśli poprzednio wybrano opcję kompresji." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Szybka zmiana nazwy dokumentu" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Zachowaj rozszerzenie" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Data dodania" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Język" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Typ MIME pliku" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Brak" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Kodowanie pliku" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Rozmiar pliku" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Istnieje w systemie" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Wszystkie dokumenty" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "Ostatnio przeglądane" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Pobieranie dokumentów" @@ -747,187 +748,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Styczeń" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Luty" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "Marzec" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "Kwiecień" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Maj" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "Czerwiec" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Lipiec" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "Sierpień" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "Wrzesień" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Październik" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "Listopad" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "Grudzień" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Nowe dokumenty miesięcznie" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Nowe wersje dokumentów miesięcznie" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Nowe strony dokumentów miesięcznie" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Liczba dokumentów w każdym miesiącu" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Liczba wersji dokumentów w każdym miesiącu" -#: statistics.py:272 +#: 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" @@ -1054,68 +1073,68 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "Szybkie etykiety dla typu dokumentu: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Pobieranie wersji dokumentu" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Wersje dokumentu: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Wszystkie kolejne wersje również zostaną usunięte." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Przywrócić tę wersję?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Wersję dokumentu przywrócono pomyślnie" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Błąd podczas przywracania wersji dokumentu: %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "Podgląd wersji dokumentu: %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "Dokumenty nie są dostępne" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Zmień" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "Zmień typ dokumentu: %s" -#: views/document_views.py:151 +#: views/document_views.py:153 #, 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:203 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:295 #, 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:331 #, python-format msgid "Preview of document: %s" msgstr "Podgląd dokumentu: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Właściwości dokumentu: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "Sklonowano transformacje pomyślnie." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Wykonaj" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "Wydruk: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 a088c17d51..d868af4c1b 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Páginas" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:284 +#: 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 "" @@ -147,62 +153,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "" -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Renomeação rápida de documento" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Data de adição" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Tipo MIME do ficheiro" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Nenhum" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Tamanho do ficheiro" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Existe no armazenamento" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Descarregar documentos" @@ -744,187 +745,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:272 +#: 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" @@ -1051,216 +1066,231 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Todas as versões posteriores a esta também serão eliminadas." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Versão do documento revertida com sucesso" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Erro ao reverter versão do documento; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Submeter" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 e2ee2a1b46..788505f0d4 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniatura" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Páginas" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Duplicados" -#: apps.py:284 +#: 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" @@ -150,62 +156,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "O nome do arquivo do arquivo compactado que vai conter os documentos a serem baixados, se a opção anterior é selecionado." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Renomear documento rapidamente" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Preservar a extensão" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document 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 o documento corretamente." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Data de adição" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Linguagem" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Mimetype do arquivo" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Nenhum" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Codificação de arquivo" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Tamanho do arquivo" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Existe no armazenamento" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Todos os Documentos" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "Acessado recentemente" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Baixar documentos" @@ -747,187 +748,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "Janeiro" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "Fevereiro" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "Março" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "Abril" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "Maio" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "Junho" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "Julho" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "Agosto" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "Setembro" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "Outubro" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "Novembro" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "Dezembro" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Novos documentos por mês" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Novas versões de documentos por mês" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Novas páginas de documentos por mês" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Total de documentos por mês" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Total de versões de documentos por mês" -#: statistics.py:272 +#: 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" @@ -1054,216 +1069,231 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "Etiquetas rápidas para documento do tipo: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Versões do documento: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Tudo versão posterior após este será excluído também." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Reverter para esta versão?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Versão do documento revertidos com sucesso" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Erro ao reverter versão do documento; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Mudança" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, 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:153 #, 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:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Editar propriedades de documento: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Pré-visualização do documento:%s " -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Pré-visualização do documento:%s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "Transformações clonadas com sucesso." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Submeter" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "Imprimir: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 000e9fb98e..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 6e52653dc9..bd9ad20cf7 100644 --- a/mayan/apps/documents/locale/ro_RO/LC_MESSAGES/django.po +++ b/mayan/apps/documents/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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:28-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" "Content-Type: text/plain; charset=UTF-8\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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Miniatură" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Pagini" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Dubluri" -#: apps.py:284 +#: 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" @@ -149,62 +155,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Nume fișier comprimat, care va conține documentele ce urmează să fie descărcate, în cazul în care această opțiunea a fost selectată anterior." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Redenumire rapidă" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "Păstrați extensia" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document 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ă documentul corect." -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Dată adaugată" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Limba" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Tip fişier " -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Nici unul" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Codarea fișierelor" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Marime fişier" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Există în arhivă" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "Toate documentele" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "Accesate recent" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Descărcați documente" @@ -746,193 +747,195 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "ianuarie" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "februarie" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "martie" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "aprilie" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "mai" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "iunie" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "iulie" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "august" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "septembrie" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "octombrie" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "noiembrie" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "decembrie" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Documente noi pe lună" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Versiuni noi de documente pe lună" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Pagini noi de documente pe lună" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Total documente în fiecare lună" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Total versiuni de documente pentru fiecare lună" -#: statistics.py:272 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Numărul total de pagini de documente din fiecare lună" #: templates/documents/document_print.html:12 msgid "Document page image preview" -msgstr "" +msgstr "Previzualizare imagine pagină document" #: templates/documents/forms/widgets/document_page_carousel.html:16 #, python-format @@ -948,14 +951,14 @@ msgstr "Nu există pagini de afișat" #: templates/documents/forms/widgets/document_page_image.html:13 msgid "Document image" -msgstr "" +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" @@ -1053,220 +1070,235 @@ msgstr "Nu există etichete rapide pentru acest tip de document" msgid "Quick labels for document type: %s" msgstr "Etichete rapide pentru tipul de document: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "Descărcați versiunea de document" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Versiuni de document: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Toate versiune de dupa aceasta, vor fi şterse de asemenea." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Reveniți la această versiune?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Versiunea documentului refacută cu succes" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Eroare la revenirea la versiunea documentului; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "Previzualizarea versiunii de document: %s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, 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:92 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:96 msgid "No documents available" msgstr "Nu există documente disponibile" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Modificare" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, 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:153 #, 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:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Editați proprietățile documentului: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Previzualizarea documentului: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Proprietățile documentului: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, 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:485 msgid "Transformations cloned successfully." msgstr "Transformările clonate cu succes." -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Trimiteţi" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "Tipărește: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +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:606 +msgid "There are no recently accessed document" +msgstr "Nu există niciun document accesat recent " + +#: views/document_views.py:628 +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:632 +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 756b4a3123..6dd8559ce6 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Миниатюра" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Страницы" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:284 +#: 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 "Документ просмотрен" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Имя файла сжатого файла, который будет содержать загружаемые документы, если выбран предыдущий параметр." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Быстро переименовать документ" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Дата добавления" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Язык" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Mime тип файла" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Ни один" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Кодировка файла" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Размер" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Существует в хранилище" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "Путь к файлу в хранилище" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "Все документы" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Загрузка документов" @@ -745,187 +746,189 @@ 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 "Процент увеличения страницы документа пользователем." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Новых документов в месяц" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Новых версий документов в месяц" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Новых страниц документов в месяц" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Всего документов в месяц" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Новых версий документов в месяц" -#: statistics.py:272 +#: 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" @@ -1052,68 +1071,68 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "Быстрые метки для типа документа: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Версии документа: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Все более поздние версии после этого будут удалены" -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Вернуться к этой версии?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Версия документа восстановлена" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Ошибка получения версии документа %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "Тип документа для \"%s\" успешно изменён." -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Правка свойств документа: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Предпросмотр документа: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Свойства документа: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Подтвердить" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "Печать: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 09659ae33f..44cde519ee 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Strani" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:284 +#: 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 "" @@ -147,62 +153,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Ime skrčene datotteke, ki do vsebovala datoteke za prenos, če je bila prejšnja opcija izbrana." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Hitro preimenovanje dokumenta" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Dodano datum" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "MIME vrsta datoteke" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Brez" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Velikost datoteke" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Obstaja v shrambi" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 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:183 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:200 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:97 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Prenesi dokumente" @@ -744,187 +745,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:272 +#: 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" @@ -1051,68 +1070,68 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Vse prejšnje verzije bodo tudi izbrisane." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Povrnitev verzije dokumenta je bila uspešna" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Napaka v povrnitvi dokumenta verzija: %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "Pošlji" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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..2a9dd11f64 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 ab80bf1ce0..88d4188ef8 100644 --- a/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.po +++ b/mayan/apps/documents/locale/tr_TR/LC_MESSAGES/django.po @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# emreunal , 2019 # Nurgül Özkan , 2017 # serhatcan77 , 2017 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:28-0400\n" +"PO-Revision-Date: 2019-12-13 16:52+0000\n" +"Last-Translator: emreunal \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" @@ -19,51 +20,52 @@ msgstr "" "Language: tr_TR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: apps.py:109 apps.py:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "Küçük ikon" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Sayfalar" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "Yinele" -#: apps.py:284 +#: apps.py:313 msgid "Type" msgstr "Tür" @@ -79,7 +81,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 +111,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" @@ -149,62 +156,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "Önceki seçenek seçiliyse, indirilecek belgeleri içeren sıkıştırılmış dosyanın dosya adı." -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Hızlı belge yeniden adlandırma" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Ekleme Tarihi" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "Dil" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Dosya mimetype" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "Yok" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "Dosya şifreleme" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Dosya büyüklüğü" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "Depoda varolan varlıklar" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "Depoda dosya yolu" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 literals.py:43 msgid "Page range" msgstr "Sayfa aralığı" @@ -227,196 +234,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:97 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:608 msgid "Recently accessed" -msgstr "" +msgstr "Son erişilenler" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 msgid "Recently added" +msgstr "Son eklenenler" + +#: links/document_links.py:84 +msgid "Preview" +msgstr "Önizleme" + +#: links/document_links.py:90 +msgid "Properties" +msgstr "Özellikler" + +#: links/document_links.py:96 +msgid "Print" +msgstr "Yazdır" + +#: links/document_links.py:101 +msgid "Quick download" msgstr "" -#: links.py:264 -msgid "Trash can" -msgstr "Çöp Kutusu" - -#: 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.py:274 -msgid "Clear document image cache" -msgstr "Belge görüntü ön belleğini temizle" - -#: links.py:278 permissions.py:51 -msgid "Empty trash" -msgstr "Çöp kutusunu boşalt" - -#: 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 -msgid "Duplicated documents" +#: 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.py:426 queues.py:70 +#: 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 "Yinelenen belgeler" + +#: 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 "Favoriler" + +#: links/favorite_links.py:18 links/favorite_links.py:28 +msgid "Add to favorites" +msgstr "Favorilere Ekle" + +#: links/favorite_links.py:24 links/favorite_links.py:33 +msgid "Remove from favorites" +msgstr "Favorilerden sil" + +#: 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 +449,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 +485,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 +571,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 +656,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:205 msgid "Download documents" msgstr "Belgeleri indir" @@ -746,187 +748,189 @@ 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 "" +msgstr "Kullanıcı başına en son erişilen (oluşturulmuş, düzenlenmiş, görüntülenen) belgelerin maksimum sayısı." -#: settings.py:112 +#: settings.py:126 msgid "Maximum number of recently created documents to show." -msgstr "" +msgstr "Gösterilecek en fazla son oluşturulan belgeler sayısı" -#: 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "Aylık yeni belgeler" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "Aylık yeni belge sürümleri" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "Aylık yeni belge sayfaları" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "Her ayın toplam belgeleri" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "Her ayki toplam belge versiyonu" -#: statistics.py:272 +#: statistics.py:275 msgid "Total document pages at each month" msgstr "Her ayki toplam belge sayfası" @@ -950,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 " @@ -963,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 "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" @@ -1053,238 +1069,253 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "Belge türü için hızlı etiketler: %s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "Belge versiyonları: %s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "Bunun ardındaki tüm sonraki sürümler de silinir." -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "Bu sürüme geri dönmek için?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "Belge sürümü başarıyla geri alındı" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "Belge sürümünü geri yüklerken hata oluştu; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, 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:112 #, 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:119 msgid "Change" msgstr "Değişiklik" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, 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:153 #, 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:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "Belge özelliklerini düzenle: %s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "Belgenin önizlemesi: %s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "Belge için özellikler: %s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, 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:360 #, 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:368 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:379 #, 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:395 #, 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:408 #, 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:411 #, 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:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "Belge için sayfa dönüşümleri kopyalanırken hata oluştu: %(document)s; %(error)s" + +#: views/document_views.py:485 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:501 views/document_views.py:574 msgid "Submit" msgstr "Gönder" -#: views/document_views.py:582 +#: views/document_views.py:503 #, 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:577 #, python-format msgid "Print: %s" msgstr "Yazdırma: %s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "Burada bu kullanıcı tarafından en son bakılan ya da değiştirilen belgelerin listesini görüntüleyebilirsiniz." + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "En son erişilen belge bulunmamaktadır" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "Burada sisteme en son yüklenen belgelerin listesini görüntüleyebilirsiniz." + +#: views/document_views.py:632 +msgid "There are no recently added document" +msgstr "Son eklenen döküman bulunmamaktadır" + +#: views/duplicated_document_views.py:36 +msgid "Only exact copies of this document will be shown in the this list." +msgstr "Bu listede bu belgenin sadece birebir aynı kopyaları gösterilir. " + +#: views/duplicated_document_views.py:40 +msgid "There are no duplicates for this document" +msgstr "Bu belgenin kopyası bulunmamaktadır" + +#: 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 "" +msgstr "Yinelenen Belgeler son byte'ına kadar bire bir aynı belgelerdir. İçerik olarak aynı metin veya OKT(Optik Karakter Tanıma)'ya sahip olmasına rağmen aynı olmayan ya da farklı bir dosya uzantısıyla kaydedilen belgeler (belge.pdf ve belge.docx gibi ) yinelenen belge olarak gösterilmemektedir." -#: views/document_views.py:688 +#: views/duplicated_document_views.py:76 msgid "There are no duplicated documents" -msgstr "" +msgstr "Yinelenen belge bulunmamaktadır" -#: 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 msgid "" "Favorited documents will be listed in this view. Up to %(count)d documents " "can be favorited per user. " -msgstr "" +msgstr "Favorilere eklenen belgeler burada gösterilecektir. Kullanıcı başına %(count)d'a kadar belge favorilere eklenebilir." #: views/favorite_document_views.py:36 msgid "There are no favorited documents." -msgstr "" +msgstr "Favorilere eklenen belge bulunmamaktadır." #: views/favorite_document_views.py:47 #, python-format msgid "%(count)d document added to favorites." -msgstr "" +msgstr "%(count)d döküman favorilere eklendi" #: views/favorite_document_views.py:50 #, python-format msgid "%(count)d documents added to favorites." -msgstr "" +msgstr "%(count)d döküman favorilere eklendi" #: views/favorite_document_views.py:57 msgid "Add" @@ -1293,65 +1324,49 @@ msgstr "Ekle" #: views/favorite_document_views.py:60 msgid "Add the selected document to favorites" msgid_plural "Add the selected documents to favorites" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Seçili dökümanı favorilere ekle" +msgstr[1] "Seçili dökümanları favorilere ekle" #: views/favorite_document_views.py:73 #, python-format msgid "Document \"%(instance)s\" is not in favorites." -msgstr "" +msgstr "%(instance)s dökümanı favorilerde değil" #: views/favorite_document_views.py:77 #, python-format msgid "%(count)d document removed from favorites." -msgstr "" +msgstr "%(count)d döküman favorilerden silindi" #: views/favorite_document_views.py:80 #, python-format msgid "%(count)d documents removed from favorites." -msgstr "" +msgstr "%(count)d döküman favorilerden silindi" #: views/favorite_document_views.py:87 msgid "Remove" -msgstr "Çıkar" +msgstr "Sil" #: views/favorite_document_views.py:90 msgid "Remove the selected document from favorites" 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." +msgstr[0] "Seçili dökümanı favorilerden sil" +msgstr[1] "Seçili dökümanları favorilerden sil" #: views/trashed_document_views.py:39 #, python-format msgid "%(count)d document moved to the trash." -msgstr "" +msgstr "%(count)d adet belge çöp kutusuna taşındı." #: views/trashed_document_views.py:42 #, python-format msgid "%(count)d documents moved to the trash." -msgstr "" +msgstr "%(count)d adet belge çöp kutusuna taşındı." #: views/trashed_document_views.py:50 msgid "Move the selected document to the trash?" msgid_plural "Move the selected documents to the trash?" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Seçili belge çöp kutusuna taşınsın mı?" +msgstr[1] "Seçili belgeler çöp kutusuna taşınsın mı?" #: views/trashed_document_views.py:64 msgid "Empty trash?" @@ -1359,7 +1374,7 @@ msgstr "Çöp kutusunu boşalt?" #: views/trashed_document_views.py:78 msgid "Trash emptied successfully" -msgstr "Çöp kutusu başarıyla boşaldı" +msgstr "Çöp kutusu başarıyla boşaltıldı" #: views/trashed_document_views.py:87 #, python-format 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 cef08cf001..73fa76d519 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "Trang" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "" -#: apps.py:284 +#: 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 "" @@ -147,62 +153,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "" -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "Sửa nhanh tên tài liệu" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "Ngày thêm vào" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "Kiểu file" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "None" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "Kích thước file" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "Tải xuống tài liệu" @@ -744,187 +745,189 @@ 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." -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "" -#: statistics.py:272 +#: 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" @@ -1051,213 +1064,228 @@ msgstr "" msgid "Quick labels for document type: %s" msgstr "" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "" -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, python-format msgid "" "Error deleting the page transformations for document: %(document)s; " "%(error)s." msgstr "" -#: views/document_views.py:565 +#: views/document_views.py:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "" + +#: views/document_views.py:632 +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 8f14f29b63..a590325249 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-09-24 23:11-0400\n" -"PO-Revision-Date: 2019-09-24 04:46+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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:296 events.py:7 menus.py:10 -#: models/document_models.py:94 permissions.py:7 queues.py:26 settings.py:14 -#: statistics.py:233 +#: 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:241 apps.py:270 apps.py:280 apps.py:316 apps.py:334 +#: apps.py:262 apps.py:292 apps.py:309 apps.py:355 msgid "Thumbnail" msgstr "缩略图" -#: apps.py:249 apps.py:339 forms/document_forms.py:182 links.py:83 +#: apps.py:270 apps.py:360 forms/document_forms.py:184 +#: links/document_version_page_links.py:137 msgid "Pages" msgstr "页面" -#: apps.py:258 links.py:420 +#: apps.py:279 links/duplicated_document_links.py:14 msgid "Duplicates" msgstr "重复" -#: apps.py:284 +#: 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 "文档已查看" @@ -148,62 +154,62 @@ msgid "" "downloaded, if the previous option is selected." msgstr "如果选择了上一个选项,则压缩文件的文件名将包含要下载的文档。" -#: forms/document_forms.py:85 +#: forms/document_forms.py:87 msgid "Quick document rename" msgstr "快速文档重命名" -#: forms/document_forms.py:93 forms/document_version_forms.py:15 +#: forms/document_forms.py:95 forms/document_version_forms.py:15 msgid "Preserve extension" msgstr "保留扩展名" -#: forms/document_forms.py:95 +#: forms/document_forms.py:97 msgid "" "Takes the file extension and moves it to the end of the filename allowing " "operating systems that rely on file extensions to open document correctly." msgstr "获取文件扩展名并将其移动到文件名的末尾,允许依赖文件扩展名的操作系统正确打开文档。" -#: forms/document_forms.py:147 +#: forms/document_forms.py:149 msgid "Date added" msgstr "日期已添加" -#: forms/document_forms.py:151 models/document_models.py:41 search.py:43 +#: forms/document_forms.py:153 models/document_models.py:41 search.py:43 msgid "UUID" msgstr "UUID" -#: forms/document_forms.py:153 models/document_models.py:65 +#: forms/document_forms.py:155 models/document_models.py:65 msgid "Language" msgstr "语言" -#: forms/document_forms.py:161 +#: forms/document_forms.py:163 msgid "File mimetype" msgstr "文件mime类型" -#: forms/document_forms.py:162 forms/document_forms.py:167 +#: forms/document_forms.py:164 forms/document_forms.py:169 msgid "None" msgstr "没有" -#: forms/document_forms.py:165 +#: forms/document_forms.py:167 msgid "File encoding" msgstr "文件编码" -#: forms/document_forms.py:171 models/document_page_models.py:290 +#: forms/document_forms.py:173 msgid "File size" msgstr "文件大小" -#: forms/document_forms.py:176 +#: forms/document_forms.py:178 msgid "Exists in storage" msgstr "存储中存在" -#: forms/document_forms.py:178 +#: forms/document_forms.py:180 msgid "File path in storage" msgstr "存储中的文件路径" -#: forms/document_forms.py:181 models/document_version_models.py:111 +#: forms/document_forms.py:183 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:200 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:97 msgid "All documents" msgstr "所有文档" -#: links.py:255 views/document_views.py:712 +#: links/document_links.py:57 views/document_views.py:608 msgid "Recently accessed" msgstr "最近访问" -#: links.py:259 views/document_views.py:738 +#: links/document_links.py:61 views/document_views.py:634 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:205 msgid "Download documents" msgstr "下载文档" @@ -745,187 +746,189 @@ 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 "每个用户交互放大或缩小文档页面的百分比数量。" -#: statistics.py:18 +#: statistics.py:17 msgid "January" msgstr "一月" -#: statistics.py:18 +#: statistics.py:17 msgid "February" msgstr "二月" -#: statistics.py:18 +#: statistics.py:17 msgid "March" msgstr "三月" -#: statistics.py:18 +#: statistics.py:17 msgid "April" msgstr "四月" -#: statistics.py:18 +#: statistics.py:17 msgid "May" msgstr "五月" -#: statistics.py:19 +#: statistics.py:18 msgid "June" msgstr "六月" -#: statistics.py:19 +#: statistics.py:18 msgid "July" msgstr "七月" -#: statistics.py:19 +#: statistics.py:18 msgid "August" msgstr "八月" -#: statistics.py:19 +#: statistics.py:18 msgid "September" msgstr "九月" -#: statistics.py:19 +#: statistics.py:18 msgid "October" msgstr "十月" -#: statistics.py:20 +#: statistics.py:19 msgid "November" msgstr "十一月" -#: statistics.py:20 +#: statistics.py:19 msgid "December" msgstr "十二月" -#: statistics.py:237 +#: statistics.py:240 msgid "New documents per month" msgstr "每月新文档数" -#: statistics.py:244 +#: statistics.py:247 msgid "New document versions per month" msgstr "每月新文档版本数" -#: statistics.py:251 +#: statistics.py:254 msgid "New document pages per month" msgstr "每月新文档页数" -#: statistics.py:258 +#: statistics.py:261 msgid "Total documents at each month" msgstr "每月文档总数" -#: statistics.py:265 +#: statistics.py:268 msgid "Total document versions at each month" msgstr "每月文档版本总数" -#: statistics.py:272 +#: 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" @@ -1052,214 +1065,229 @@ msgstr "此文档类型没有快速标签" msgid "Quick labels for document type: %s" msgstr "文档类型的快速标签:%s" -#: views/document_version_views.py:46 +#: views/document_version_views.py:45 msgid "Download document version" msgstr "下载文档版本" -#: views/document_version_views.py:106 +#: views/document_version_views.py:83 #, python-format msgid "Versions of document: %s" msgstr "文档版本:%s" -#: views/document_version_views.py:121 +#: views/document_version_views.py:98 msgid "All later version after this one will be deleted too." msgstr "此后的所有后续版本也将被删除。" -#: views/document_version_views.py:124 +#: views/document_version_views.py:101 msgid "Revert to this version?" msgstr "还原到这个版本?" -#: views/document_version_views.py:135 +#: views/document_version_views.py:112 msgid "Document version reverted successfully" msgstr "文档版本已成功恢复" -#: views/document_version_views.py:140 +#: views/document_version_views.py:117 #, python-format msgid "Error reverting document version; %s" msgstr "恢复文档版本时出错; %s" -#: views/document_version_views.py:167 +#: views/document_version_views.py:144 #, python-format msgid "Preview of document version: %s" msgstr "文档版本预览:%s" -#: views/document_views.py:69 +#: views/document_views.py:71 #, python-format msgid "Error retrieving document list: %(exception)s." msgstr "检索文档列表时出错:%(exception)s。" -#: views/document_views.py:90 +#: views/document_views.py:92 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:96 msgid "No documents available" msgstr "没有可用的文件" -#: views/document_views.py:107 +#: views/document_views.py:109 #, python-format msgid "Document type change request performed on %(count)d document" msgstr "在%(count)d文档上执行文档类型更改请求" -#: views/document_views.py:110 +#: views/document_views.py:112 #, python-format msgid "Document type change request performed on %(count)d documents" msgstr "在%(count)d文档上执行文档类型更改请求" -#: views/document_views.py:117 +#: views/document_views.py:119 msgid "Change" msgstr "更改" -#: views/document_views.py:119 +#: views/document_views.py:121 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:132 #, python-format msgid "Change the type of the document: %s" msgstr "更改文档类型:%s" -#: views/document_views.py:151 +#: views/document_views.py:153 #, python-format msgid "Document type for \"%s\" changed successfully." msgstr "“%s”的文档类型已成功更改。" -#: views/document_views.py:220 +#: views/document_views.py:203 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:295 #, python-format msgid "Edit properties of document: %s" msgstr "编辑文档属性:%s" -#: views/document_views.py:415 +#: views/document_views.py:331 #, python-format msgid "Preview of document: %s" msgstr "文件预览:%s" -#: views/document_views.py:433 +#: views/document_views.py:349 #, python-format msgid "Properties for document: %s" msgstr "文档属性:%s" -#: views/document_views.py:441 +#: views/document_views.py:357 #, python-format msgid "%(count)d document queued for page count recalculation" msgstr "%(count)d文档排队等待页数重新计算" -#: views/document_views.py:444 +#: views/document_views.py:360 #, python-format msgid "%(count)d documents queued for page count recalculation" msgstr "%(count)d文档排队等待页数重新计算" -#: views/document_views.py:452 +#: views/document_views.py:368 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:379 #, python-format msgid "Recalculate the page count of the document: %s?" msgstr "重新计算文档的页数:%s?" -#: views/document_views.py:479 +#: views/document_views.py:395 #, 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:408 #, python-format msgid "Transformation clear request processed for %(count)d document" msgstr "已为%(count)d文档处理转换清除请求" -#: views/document_views.py:495 +#: views/document_views.py:411 #, python-format msgid "Transformation clear request processed for %(count)d documents" msgstr "已为%(count)d文档处理转换清除请求" -#: views/document_views.py:503 +#: views/document_views.py:419 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:430 #, 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:445 #, 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:477 +#, python-format +msgid "" +"Error cloning the page transformations for document: %(document)s; " +"%(error)s." +msgstr "" + +#: views/document_views.py:485 msgid "Transformations cloned successfully." msgstr "转换克隆成功。" -#: views/document_views.py:580 views/document_views.py:653 +#: views/document_views.py:501 views/document_views.py:574 msgid "Submit" msgstr "提交" -#: views/document_views.py:582 +#: views/document_views.py:503 #, python-format msgid "Clone page transformations for document: %s" msgstr "克隆文档页面转换:%s" -#: views/document_views.py:656 +#: views/document_views.py:577 #, python-format msgid "Print: %s" msgstr "打印:%s" -#: views/document_views.py:681 +#: views/document_views.py:602 +msgid "" +"This view will list the latest documents viewed or manipulated in any way by" +" this user account." +msgstr "此视图将列出此用户帐户以任何方式查看或操作的最新文档。" + +#: views/document_views.py:606 +msgid "There are no recently accessed document" +msgstr "最近没有访问过的文档" + +#: views/document_views.py:628 +msgid "This view will list the latest documents uploaded in the system." +msgstr "此视图将列出系统中最新上传的文档。" + +#: views/document_views.py:632 +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 b047b9d5e9..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): @@ -147,7 +133,7 @@ class DuplicatedDocumentManager(models.Manager): app_label='documents', model_name='Document' ) return Document.objects.filter( - pk__in=self.filter(documents__isnull=False).values_list( + pk__in=self.filter(documents__in_trash=False).values_list( 'document_id', flat=True ) ) 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 9f205226c8..197850478d 100644 --- a/mayan/apps/documents/models/document_models.py +++ b/mayan/apps/documents/models/document_models.py @@ -5,7 +5,7 @@ import uuid from django.apps import apps from django.core.files import File -from django.db import models +from django.db import models, transaction from django.urls import reverse from django.utils.encoding import python_2_unicode_compatible from django.utils.timezone import now @@ -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,18 +101,30 @@ 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: - for version in self.versions.all(): - version.delete() + with transaction.atomic(): + for version in self.versions.all(): + version.delete() - return super(Document, self).delete(*args, **kwargs) + return super(Document, self).delete(*args, **kwargs) def exists(self): """ @@ -126,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} @@ -136,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'] @@ -169,73 +188,6 @@ class Document(models.Model): """ return self.latest_version.open(*args, **kwargs) - def restore(self): - self.in_trash = False - self.save() - - def save(self, *args, **kwargs): - user = kwargs.pop('_user', None) - _commit_events = kwargs.pop('_commit_events', True) - new_document = not self.pk - super(Document, self).save(*args, **kwargs) - - if new_document: - if user: - self.add_as_recent_document_for_user(user) - event_document_create.commit( - actor=user, target=self, action_object=self.document_type - ) - else: - event_document_create.commit( - target=self, action_object=self.document_type - ) - else: - if _commit_events: - event_document_properties_edit.commit(actor=user, target=self) - - def save_to_file(self, *args, **kwargs): - return self.latest_version.save_to_file(*args, **kwargs) - - def set_document_type(self, document_type, force=False, _user=None): - has_changed = self.document_type != document_type - - self.document_type = document_type - self.save() - if has_changed or force: - post_document_type_change.send( - sender=self.__class__, instance=self - ) - - event_document_type_change.commit(actor=_user, target=self) - if _user: - self.add_as_recent_document_for_user(user=_user) - - @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 @@ -251,3 +203,62 @@ class Document(models.Model): ) 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() + + def save(self, *args, **kwargs): + user = kwargs.pop('_user', None) + _commit_events = kwargs.pop('_commit_events', True) + new_document = not self.pk + with transaction.atomic(): + super(Document, self).save(*args, **kwargs) + + if new_document: + if user: + self.add_as_recent_document_for_user(user) + event_document_create.commit( + actor=user, target=self, action_object=self.document_type + ) + else: + event_document_create.commit( + target=self, action_object=self.document_type + ) + else: + if _commit_events: + event_document_properties_edit.commit(actor=user, target=self) + + def save_to_file(self, *args, **kwargs): + return self.latest_version.save_to_file(*args, **kwargs) + + def set_document_type(self, document_type, force=False, _user=None): + has_changed = self.document_type != document_type + + self.document_type = document_type + with transaction.atomic(): + self.save() + if has_changed or force: + post_document_type_change.send( + sender=self.__class__, instance=self + ) + + event_document_type_change.commit(actor=_user, target=self) + if _user: + self.add_as_recent_document_for_user(user=_user) + + @property + def size(self): + return self.latest_version.size 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..e5be1264aa 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,8 +156,8 @@ class DocumentVersion(models.Model): for page in self.pages.all(): degrees = page.detect_orientation() if degrees: - Transformation.objects.add_to_object( - obj=page, transformation=TransformationRotate, + layer_saved_transformations.add_transformation_to( + obj=page, transformation_class=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..1043135e17 --- /dev/null +++ b/mayan/apps/documents/setting_migrations.py @@ -0,0 +1,16 @@ +from __future__ import unicode_literals + +from mayan.apps.smart_settings.classes import NamespaceMigration +from mayan.apps.smart_settings.utils import smart_yaml_load + + +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 smart_yaml_load(value=value) + + def documents_storage_backend_arguments_0001(self, value): + return smart_yaml_load(value=value) 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 2f1059e7d1..a97616f192 100644 --- a/mayan/apps/documents/statistics.py +++ b/mayan/apps/documents/statistics.py @@ -1,8 +1,7 @@ from __future__ import absolute_import, unicode_literals -import datetime - from django.apps import apps +from django.utils import timezone from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _ @@ -21,19 +20,23 @@ 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') qss = qsstats.QuerySetStats(Document.passthrough.all(), 'date_added') - today = datetime.date.today() - this_year = datetime.date(year=today.year, month=1, day=1) + now = timezone.now().date() + start = timezone.datetime(year=now.year, month=1, day=1).date() return { 'series': { 'Documents': map( - lambda x: {force_text(MONTH_NAMES[x[0].month]): x[1]}, - qss.time_series(start=this_year, end=today, interval='months') + lambda x: {get_month_name(month_number=x[0].month): x[1]}, + qss.time_series(start=start, end=now, interval='months') ) } } @@ -48,14 +51,14 @@ def new_document_pages_per_month(): DocumentPage.objects.all(), 'document_version__document__date_added' ) - today = datetime.date.today() - this_year = datetime.date(year=today.year, month=1, day=1) + now = timezone.now().date() + start = timezone.datetime(year=now.year, month=1, day=1).date() return { 'series': { 'Pages': map( - lambda x: {force_text(MONTH_NAMES[x[0].month]): x[1]}, - qss.time_series(start=this_year, end=today, interval='months') + lambda x: {get_month_name(month_number=x[0].month): x[1]}, + qss.time_series(start=start, end=now, interval='months') ) } } @@ -88,14 +91,14 @@ def new_document_versions_per_month(): DocumentVersion.objects.all(), 'document__date_added' ) - today = datetime.date.today() - this_year = datetime.date(year=today.year, month=1, day=1) + now = timezone.now().date() + start = timezone.datetime(year=now.year, month=1, day=1).date() return { 'series': { 'Versions': map( - lambda x: {force_text(MONTH_NAMES[x[0].month]): x[1]}, - qss.time_series(start=this_year, end=today, interval='months') + lambda x: {get_month_name(month_number=x[0].month): x[1]}, + qss.time_series(start=start, end=now, interval='months') ) } } @@ -127,25 +130,25 @@ def total_document_per_month(): Document = apps.get_model(app_label='documents', model_name='Document') qss = qsstats.QuerySetStats(Document.objects.all(), 'date_added') - this_year = datetime.date.today().year + now = timezone.now() result = [] - for month in range(1, datetime.date.today().month + 1): + for month in range(1, now.month + 1): next_month = month + 1 if month == 12: next_month = 1 - year = this_year + 1 + year = now.year + 1 else: next_month = month + 1 - year = this_year + year = now.year result.append( { - force_text( - MONTH_NAMES[month] - ): qss.until(datetime.date(year, next_month, 1)) + get_month_name(month_number=month): qss.until( + timezone.datetime(year, next_month, 1, tzinfo=now.tzinfo) + ) } ) @@ -164,25 +167,25 @@ def total_document_version_per_month(): qss = qsstats.QuerySetStats( DocumentVersion.objects.all(), 'document__date_added' ) - this_year = datetime.date.today().year + now = timezone.now() result = [] - for month in range(1, datetime.date.today().month + 1): + for month in range(1, now.month + 1): next_month = month + 1 if month == 12: next_month = 1 - year = this_year + 1 + year = now.year + 1 else: next_month = month + 1 - year = this_year + year = now.year result.append( { - force_text( - MONTH_NAMES[month] - ): qss.until(datetime.date(year, next_month, 1)) + get_month_name(month_number=month): qss.until( + timezone.datetime(year, next_month, 1, tzinfo=now.tzinfo) + ) } ) @@ -201,25 +204,25 @@ def total_document_page_per_month(): qss = qsstats.QuerySetStats( DocumentPage.objects.all(), 'document_version__document__date_added' ) - this_year = datetime.date.today().year + now = timezone.now() result = [] - for month in range(1, datetime.date.today().month + 1): + for month in range(1, now.month + 1): next_month = month + 1 if month == 12: next_month = 1 - year = this_year + 1 + year = now.year + 1 else: next_month = month + 1 - year = this_year + year = now.year result.append( { - force_text( - MONTH_NAMES[month] - ): qss.until(datetime.date(year, next_month, 1)) + 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/contrib/sample_documents/rotate_alternate.pdf b/mayan/apps/documents/tests/contrib/sample_documents/rotate_alternate.pdf new file mode 100644 index 0000000000..463118e7db Binary files /dev/null and b/mayan/apps/documents/tests/contrib/sample_documents/rotate_alternate.pdf differ diff --git a/mayan/apps/documents/tests/literals.py b/mayan/apps/documents/tests/literals.py index 12e1b85686..adc71f7ba6 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' @@ -44,11 +29,13 @@ TEST_NON_ASCII_DOCUMENT_FILENAME = 'I18N_title_áéíóúüñÑ.png' TEST_OFFICE_DOCUMENT = 'simple_2_page_document.doc' TEST_PDF_DOCUMENT_FILENAME = 'mayan_11_1.pdf' TEST_PDF_INDIRECT_ROTATE_LABEL = 'indirect_rotate.pdf' +TEST_PDF_ROTATE_ALTERNATE_LABEL = 'rotate_alternate.pdf' TEST_SMALL_DOCUMENT_FILENAME = 'title_page.png' 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' @@ -85,6 +72,10 @@ TEST_PDF_INDIRECT_ROTATE_PATH = os.path.join( settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', 'sample_documents', TEST_PDF_INDIRECT_ROTATE_LABEL ) +TEST_PDF_ROTATE_ALTERNATE_PATH = os.path.join( + settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', + 'sample_documents', TEST_PDF_ROTATE_ALTERNATE_LABEL +) TEST_OFFICE_DOCUMENT_PATH = os.path.join( settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', 'sample_documents', TEST_OFFICE_DOCUMENT diff --git a/mayan/apps/documents/tests/mixins.py b/mayan/apps/documents/tests/mixins.py index cb692a1f10..cafa849a7a 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() @@ -58,13 +70,8 @@ class DocumentTestMixin(object): self.test_document = document self.test_documents.append(document) - - 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 - ) + self.test_document_page = document.latest_version.pages.first() + self.test_document_version = document.latest_version class DocumentTypeViewTestMixin(object): @@ -144,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', @@ -176,13 +204,20 @@ class DocumentViewTestMixin(object): } ) - def _request_document_download_form_view(self): + def _request_document_download_form_get_view(self): return self.get( viewname='documents:document_download_form', kwargs={ 'pk': self.test_document.pk } ) + def _request_document_download_form_post_view(self): + return self.post( + viewname='documents:document_download_form', kwargs={ + 'pk': self.test_document.pk + } + ) + def _request_document_download_view(self): return self.get( viewname='documents:document_download', kwargs={ @@ -228,9 +263,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={ @@ -239,3 +271,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..8ebc76da72 100644 --- a/mayan/apps/documents/tests/test_api.py +++ b/mayan/apps/documents/tests/test_api.py @@ -4,10 +4,9 @@ import time 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 +21,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 +87,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 +109,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 +132,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 +161,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 +183,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 +200,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() @@ -207,12 +212,10 @@ class DocumentAPIViewTestCase( self.assertEqual(response.status_code, status.HTTP_200_OK) with self.test_document.open() as file_object: - assert_download_response( - self, response, content=file_object.read(), - basename=TEST_SMALL_DOCUMENT_FILENAME, - mime_type='{}; charset=utf-8'.format( - self.test_document.file_mimetype - ) + self.assert_download_response( + response=response, content=file_object.read(), + filename=TEST_SMALL_DOCUMENT_FILENAME, + mime_type=self.test_document.file_mimetype ) def test_document_api_upload_view_no_permission(self): @@ -255,11 +258,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 +318,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() @@ -378,12 +415,10 @@ class DocumentVersionAPIViewTestCase( self.assertEqual(response.status_code, status.HTTP_200_OK) with self.test_document.latest_version.open() as file_object: - assert_download_response( - self, response, content=file_object.read(), - basename=force_text(self.test_document.latest_version), - mime_type='{}; charset=utf-8'.format( - self.test_document.file_mimetype - ) + self.assert_download_response( + response=response, content=file_object.read(), + filename=force_text(self.test_document.latest_version), + mime_type=self.test_document.file_mimetype ) def test_document_version_api_download_preserve_extension_view(self): @@ -400,13 +435,11 @@ class DocumentVersionAPIViewTestCase( ) with self.test_document.latest_version.open() as file_object: - assert_download_response( - self, response, content=file_object.read(), - basename=self.test_document.latest_version.get_rendered_string( + self.assert_download_response( + response=response, content=file_object.read(), + filename=self.test_document.latest_version.get_rendered_string( preserve_extension=True - ), mime_type='{}; charset=utf-8'.format( - self.test_document.file_mimetype - ) + ), mime_type=self.test_document.file_mimetype ) def test_document_version_api_list_view_no_permission(self): @@ -607,11 +640,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 +659,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 +682,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 +742,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 bd57dc905e..c5dc1f1a91 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) @@ -165,31 +166,40 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) Document.objects.first().document_type, document_type_2 ) - def test_document_download_form_view_no_permission(self): - response = self._request_document_download_form_view() - self.assertNotContains( - response=response, text=self.test_document.label, status_code=200 - ) + def test_document_download_form_get_view_no_permission(self): + response = self._request_document_download_form_get_view() + self.assertEqual(response.status_code, 404) - def test_document_download_form_view_with_access(self): + def test_document_download_form_get_view_with_access(self): self.grant_access( obj=self.test_document, permission=permission_document_download ) - response = self._request_document_download_form_view() + response = self._request_document_download_form_get_view() self.assertContains( response=response, text=self.test_document.label, status_code=200 ) + def test_document_download_form_post_view_no_permission(self): + response = self._request_document_download_form_post_view() + self.assertEqual(response.status_code, 404) + + def test_document_download_form_post_view_with_access(self): + self.grant_access( + obj=self.test_document, permission=permission_document_download + ) + response = self._request_document_download_form_post_view() + self.assertEqual(response.status_code, 302) + def test_document_download_view_no_permission(self): response = self._request_document_download_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_document_download_view_with_permission(self): - # Set the expected_content_type for + # Set the expected_content_types for # common.tests.mixins.ContentTypeCheckMixin - self.expected_content_type = '{}; charset=utf-8'.format( - self.test_document.file_mimetype + self.expected_content_types = ( + self.test_document.file_mimetype, ) self.grant_access( @@ -202,19 +212,19 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) with self.test_document.open() as file_object: self.assert_download_response( response=response, content=file_object.read(), - basename=TEST_SMALL_DOCUMENT_FILENAME, + filename=TEST_SMALL_DOCUMENT_FILENAME, mime_type=self.test_document.file_mimetype ) def test_document_multiple_download_view_no_permission(self): response = self._request_document_multiple_download_view() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_document_multiple_download_view_with_permission(self): - # Set the expected_content_type for + # Set the expected_content_types for # common.tests.mixins.ContentTypeCheckMixin - self.expected_content_type = '{}; charset=utf-8'.format( - self.test_document.file_mimetype + self.expected_content_types = ( + self.test_document.file_mimetype, ) self.grant_access( obj=self.test_document, permission=permission_document_download @@ -226,19 +236,19 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) with self.test_document.open() as file_object: self.assert_download_response( response=response, content=file_object.read(), - basename=TEST_SMALL_DOCUMENT_FILENAME, + filename=TEST_SMALL_DOCUMENT_FILENAME, mime_type=self.test_document.file_mimetype ) def test_document_version_download_view_no_permission(self): response = self._request_document_version_download() - self.assertEqual(response.status_code, 403) + self.assertEqual(response.status_code, 404) def test_document_version_download_view_with_permission(self): - # Set the expected_content_type for + # Set the expected_content_types for # common.tests.mixins.ContentTypeCheckMixin - self.expected_content_type = '{}; charset=utf-8'.format( - self.test_document.latest_version.mimetype + self.expected_content_types = ( + self.test_document.latest_version.mimetype, ) self.grant_access( @@ -251,17 +261,15 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) with self.test_document.open() as file_object: self.assert_download_response( response=response, content=file_object.read(), - basename=force_text(self.test_document.latest_version), - mime_type='{}; charset=utf-8'.format( - self.test_document.latest_version.mimetype - ) + filename=force_text(self.test_document.latest_version), + mime_type=self.test_document.latest_version.mimetype ) def test_document_version_download_preserve_extension_view_with_permission(self): - # Set the expected_content_type for + # Set the expected_content_types for # common.tests.mixins.ContentTypeCheckMixin - self.expected_content_type = '{}; charset=utf-8'.format( - self.test_document.latest_version.mimetype + self.expected_content_types = ( + self.test_document.latest_version.mimetype, ) self.grant_access( @@ -276,11 +284,9 @@ class DocumentsViewsTestCase(DocumentViewTestMixin, GenericDocumentViewTestCase) with self.test_document.open() as file_object: self.assert_download_response( response=response, content=file_object.read(), - basename=self.test_document.latest_version.get_rendered_string( + filename=self.test_document.latest_version.get_rendered_string( preserve_extension=True - ), mime_type='{}; charset=utf-8'.format( - self.test_document.latest_version.mimetype - ) + ), mime_type=self.test_document.latest_version.mimetype ) def test_document_update_page_count_view_no_permission(self): @@ -293,13 +299,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) @@ -320,7 +326,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) @@ -328,18 +336,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 @@ -348,26 +349,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 @@ -377,45 +375,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 @@ -428,7 +420,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 a1bf680c18..0923e0dcc2 100644 --- a/mayan/apps/documents/tests/test_duplicated_document_views.py +++ b/mayan/apps/documents/tests/test_duplicated_document_views.py @@ -5,17 +5,66 @@ from ..permissions import permission_document_view from .base import GenericDocumentViewTestCase -class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase): - def _upload_duplicate_document(self): - self.upload_document() +class DuplicatedDocumentsViewsTestMixin(object): + def _request_document_duplicates_list_view(self): + return self.get( + viewname='documents:document_duplicates_list', + kwargs={'document_id': self.test_documents[0].pk} + ) def _request_duplicated_document_list_view(self): return self.get(viewname='documents:duplicated_document_list') - def _request_document_duplicates_list_view(self): - return self.get( - viewname='documents:document_duplicates_list', - kwargs={'pk': self.test_documents[0].pk} + def _upload_duplicate_document(self): + self.upload_document() + + +class DuplicatedDocumentsViewsTestCase( + DuplicatedDocumentsViewsTestMixin, GenericDocumentViewTestCase +): + def test_document_duplicates_list_no_permissions(self): + self._upload_duplicate_document() + + response = self._request_document_duplicates_list_view() + self.assertEqual(response.status_code, 404) + + def test_document_duplicates_list_with_access(self): + self._upload_duplicate_document() + self.grant_access( + obj=self.test_documents[0], + permission=permission_document_view + ) + self.grant_access( + obj=self.test_documents[1], + permission=permission_document_view + ) + + response = self._request_document_duplicates_list_view() + self.assertContains( + response=response, text=self.test_documents[0].label, + status_code=200 + ) + + def test_document_trashed_duplicates_list_with_full_access(self): + self._upload_duplicate_document() + self.grant_access( + obj=self.test_documents[0], + permission=permission_document_view + ) + self.grant_access( + obj=self.test_documents[1], + permission=permission_document_view + ) + self.test_documents[1].delete() + + response = self._request_document_duplicates_list_view() + self.assertContains( + response=response, text=self.test_documents[0].pk, + status_code=200 + ) + self.assertNotContains( + response=response, text=self.test_documents[1].pk, + status_code=200 ) def test_duplicated_document_list_no_permissions(self): @@ -44,13 +93,7 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase): status_code=200 ) - def test_document_duplicates_list_no_permissions(self): - self._upload_duplicate_document() - - response = self._request_document_duplicates_list_view() - self.assertEqual(response.status_code, 403) - - def test_document_duplicates_list_with_access(self): + def test_duplicated_trashed_document_list_with_access(self): self._upload_duplicate_document() self.grant_access( obj=self.test_documents[0], @@ -60,9 +103,14 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase): obj=self.test_documents[1], permission=permission_document_view ) + self.test_documents[1].delete() - response = self._request_document_duplicates_list_view() - self.assertContains( - response=response, text=self.test_documents[0].label, + response = self._request_duplicated_document_list_view() + self.assertNotContains( + response=response, text=self.test_documents[0].pk, + status_code=200 + ) + self.assertNotContains( + response=response, text=self.test_documents[1].pk, status_code=200 ) diff --git a/mayan/apps/documents/tests/test_events.py b/mayan/apps/documents/tests/test_events.py index 2f9428054b..6178ed7fef 100644 --- a/mayan/apps/documents/tests/test_events.py +++ b/mayan/apps/documents/tests/test_events.py @@ -1,15 +1,17 @@ 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,24 +19,36 @@ 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(response.status_code, 404) self.assertEqual(list(Action.objects.any(obj=self.test_document)), []) - def test_document_download_event_with_permissions(self): - self.expected_content_type = 'image/png; charset=utf-8' - - Action.objects.all().delete() + def test_document_download_event_with_access(self): + self.expected_content_types = ('image/png',) self.grant_access( obj=self.test_document, permission=permission_document_download @@ -44,8 +58,8 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase): # Download the file to close the file descriptor with self.test_document.open() as file_object: - assert_download_response( - self, response, content=file_object.read(), + self.assert_download_response( + response=response, content=file_object.read(), mime_type=self.test_document.file_mimetype ) @@ -55,24 +69,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 +87,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 fda9936e8c..f1bb6bc7a0 100644 --- a/mayan/apps/documents/tests/test_models.py +++ b/mayan/apps/documents/tests/test_models.py @@ -3,7 +3,10 @@ from __future__ import unicode_literals from datetime import timedelta import time -from mayan.apps.common.tests import BaseTestCase +from django.test import override_settings + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.converter.layers import layer_saved_transformations from ..literals import STUB_EXPIRATION_INTERVAL from ..models import ( @@ -12,18 +15,20 @@ from ..models import ( from .base import GenericDocumentTestCase from .literals import ( - TEST_DOCUMENT_TYPE_LABEL, TEST_DOCUMENT_PATH, TEST_MULTI_PAGE_TIFF_PATH, - TEST_PDF_INDIRECT_ROTATE_PATH, TEST_OFFICE_DOCUMENT_PATH, - TEST_SMALL_DOCUMENT_CHECKSUM, TEST_SMALL_DOCUMENT_FILENAME, - TEST_SMALL_DOCUMENT_MIMETYPE, TEST_SMALL_DOCUMENT_PATH, - TEST_SMALL_DOCUMENT_SIZE + TEST_DOCUMENT_TYPE_LABEL, TEST_MULTI_PAGE_TIFF, + TEST_OFFICE_DOCUMENT, TEST_PDF_INDIRECT_ROTATE_LABEL, + TEST_PDF_ROTATE_ALTERNATE_LABEL, TEST_SMALL_DOCUMENT_CHECKSUM, + TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_MIMETYPE, + TEST_SMALL_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_SIZE + ) -from .mixins import DocumentTestMixin -class DocumentTestCase(DocumentTestMixin, BaseTestCase): +class DocumentTestCase(GenericDocumentTestCase): def test_document_creation(self): - self.assertEqual(self.test_document_type.label, TEST_DOCUMENT_TYPE_LABEL) + self.assertEqual( + self.test_document_type.label, TEST_DOCUMENT_TYPE_LABEL + ) self.assertEqual(self.test_document.exists(), True) self.assertEqual(self.test_document.size, TEST_SMALL_DOCUMENT_SIZE) @@ -32,7 +37,9 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase): self.test_document.file_mimetype, TEST_SMALL_DOCUMENT_MIMETYPE ) self.assertEqual(self.test_document.file_mime_encoding, 'binary') - self.assertEqual(self.test_document.label, TEST_SMALL_DOCUMENT_FILENAME) + self.assertEqual( + self.test_document.label, TEST_SMALL_DOCUMENT_FILENAME + ) self.assertEqual( self.test_document.checksum, TEST_SMALL_DOCUMENT_CHECKSUM ) @@ -125,41 +132,38 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase): self.assertEqual(DeletedDocument.objects.count(), 0) -class PDFCompatibilityTestCase(BaseTestCase): - def test_indirect_rotate(self): - self.test_document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE_LABEL +@override_settings(DOCUMENTS_FIX_ORIENTATION=True) +class PDFAlternateRotationTestCase(GenericDocumentTestCase): + test_document_filename = TEST_PDF_ROTATE_ALTERNATE_LABEL + + def test_rotate(self): + self.assertQuerysetEqual( + qs=Document.objects.all(), values=(repr(self.test_document),) + ) + self.assertEqual( + layer_saved_transformations.get_transformations_for( + obj=self.test_document.latest_version.pages.first() + ).count(), 1 ) - with open(TEST_PDF_INDIRECT_ROTATE_PATH, mode='rb') as file_object: - self.test_document = self.test_document_type.new_document( - file_object=file_object - ) +@override_settings(DOCUMENTS_FIX_ORIENTATION=True) +class PDFIndirectRotationTestCase(GenericDocumentTestCase): + test_document_filename = TEST_PDF_INDIRECT_ROTATE_LABEL + + def test_rotate(self): self.assertQuerysetEqual( qs=Document.objects.all(), values=(repr(self.test_document),) ) -class OfficeDocumentTestCase(BaseTestCase): - def setUp(self): - super(OfficeDocumentTestCase, self).setUp() - - self.test_document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE_LABEL - ) - - with open(TEST_OFFICE_DOCUMENT_PATH, mode='rb') as file_object: - self.test_document = self.test_document_type.new_document( - file_object=file_object - ) - - def tearDown(self): - self.test_document_type.delete() - super(OfficeDocumentTestCase, self).tearDown() +class OfficeDocumentTestCase(GenericDocumentTestCase): + test_document_filename = TEST_OFFICE_DOCUMENT def test_document_creation(self): - self.assertEqual(self.test_document.file_mimetype, 'application/msword') + self.assertEqual( + self.test_document.file_mimetype, 'application/msword' + ) self.assertEqual( self.test_document.file_mime_encoding, 'binary' ) @@ -170,21 +174,8 @@ class OfficeDocumentTestCase(BaseTestCase): self.assertEqual(self.test_document.page_count, 2) -class MultiPageTiffTestCase(BaseTestCase): - def setUp(self): - super(MultiPageTiffTestCase, self).setUp() - self.test_document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE_LABEL - ) - - with open(TEST_MULTI_PAGE_TIFF_PATH, mode='rb') as file_object: - self.test_document = self.test_document_type.new_document( - file_object=file_object - ) - - def tearDown(self): - self.test_document_type.delete() - super(MultiPageTiffTestCase, self).tearDown() +class MultiPageTiffTestCase(GenericDocumentTestCase): + test_document_filename = TEST_MULTI_PAGE_TIFF def test_document_creation(self): self.assertEqual(self.test_document.file_mimetype, 'image/tiff') @@ -200,7 +191,7 @@ class DocumentVersionTestCase(GenericDocumentTestCase): def test_add_new_version(self): self.assertEqual(self.test_document.versions.count(), 1) - with open(TEST_DOCUMENT_PATH, mode='rb') as file_object: + with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object: self.test_document.new_version( file_object=file_object ) @@ -209,7 +200,7 @@ class DocumentVersionTestCase(GenericDocumentTestCase): self.assertEqual( self.test_document.checksum, - 'c637ffab6b8bb026ed3784afdb07663fddc60099853fae2be93890852a69ecf3' + TEST_SMALL_DOCUMENT_CHECKSUM ) def test_revert_version(self): @@ -219,7 +210,7 @@ class DocumentVersionTestCase(GenericDocumentTestCase): # field time.sleep(1.01) - with open(TEST_DOCUMENT_PATH, mode='rb') as file_object: + with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object: self.test_document.new_version( file_object=file_object ) diff --git a/mayan/apps/documents/tests/test_permissions.py b/mayan/apps/documents/tests/test_permissions.py new file mode 100644 index 0000000000..ed5f166c6b --- /dev/null +++ b/mayan/apps/documents/tests/test_permissions.py @@ -0,0 +1,38 @@ +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.base import BaseTestCase + +from ..models import DocumentType +from ..permissions import permission_document_view + +from .base import GenericDocumentViewTestCase + + +class DocumentTypeACLPermissionsTestCase(BaseTestCase): + def test_document_type_permission_test(self): + result = ModelPermission.get_for_class(klass=DocumentType) + self.assertTrue(permission_document_view in result) + + +class DocumentTypeACLPermissionsViewTestCase( + ACLTestMixin, GenericDocumentViewTestCase +): + auto_upload_document = False + + def test_document_type_acl_permission_view_test(self): + self.test_object = self.test_document_type + self._create_test_acl() + self.grant_access( + obj=self.test_object, permission=permission_acl_edit + ) + + response = self.get( + viewname='acls:acl_permissions', kwargs={'pk': self.test_acl.pk} + ) + self.assertContains( + response=response, text=permission_document_view.label, + status_code=200 + ) 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..f5eee20412 --- /dev/null +++ b/mayan/apps/documents/tests/test_setting_migrations.py @@ -0,0 +1,60 @@ +from __future__ import unicode_literals + +from mayan.apps.common.tests.base import BaseTestCase +from mayan.apps.smart_settings.classes import Setting +from mayan.apps.smart_settings.tests.mixins import SmartSettingTestMixin + +from ..settings import ( + setting_documentimagecache_storage_arguments, + setting_storage_backend_arguments +) + + +class DocumentSettingMigrationTestCase(SmartSettingTestMixin, BaseTestCase): + def test_documents_storage_backend_arguments_0001(self): + test_value = {'location': 'test value'} + self.test_setting = setting_documentimagecache_storage_arguments + self.test_config_value = '{}'.format( + Setting.serialize_value(value=test_value) + ) + self._create_test_config_file() + + self.assertEqual( + setting_documentimagecache_storage_arguments.value, + test_value + ) + + def test_documents_storage_backend_arguments_0001_with_dict(self): + test_value = {'location': 'test value'} + self.test_setting = setting_documentimagecache_storage_arguments + self.test_config_value = test_value + self._create_test_config_file() + + self.assertEqual( + setting_documentimagecache_storage_arguments.value, + test_value + ) + + def test_documents_cache_storage_backend_arguments_0001(self): + test_value = {'location': 'test value'} + self.test_setting = setting_storage_backend_arguments + self.test_config_value = '{}'.format( + Setting.serialize_value(value=test_value) + ) + self._create_test_config_file() + + self.assertEqual( + setting_storage_backend_arguments.value, + test_value + ) + + def test_documents_cache_storage_backend_arguments_0001_with_dict(self): + test_value = {'location': 'test value'} + self.test_setting = setting_storage_backend_arguments + self.test_config_value = test_value + self._create_test_config_file() + + 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..722d6eb81b 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,323 @@ 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/multiple/download/$', + view=DocumentVersionDownloadView.as_view(), + name='document_multiple_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 +398,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_version_views.py b/mayan/apps/documents/views/document_version_views.py index 4c53bbff36..8fba8f9c03 100644 --- a/mayan/apps/documents/views/document_version_views.py +++ b/mayan/apps/documents/views/document_version_views.py @@ -14,8 +14,7 @@ from ..events import event_document_view from ..forms import DocumentVersionDownloadForm, DocumentVersionPreviewForm from ..models import Document, DocumentVersion from ..permissions import ( - permission_document_download, permission_document_version_revert, - permission_document_version_view + permission_document_version_revert, permission_document_version_view ) from .document_views import DocumentDownloadFormView, DocumentDownloadView @@ -31,11 +30,11 @@ logger = logging.getLogger(__name__) class DocumentVersionDownloadFormView(DocumentDownloadFormView): form_class = DocumentVersionDownloadForm model = DocumentVersion - multiple_download_view = None + pk_url_kwarg = 'pk' querystring_form_fields = ( 'compressed', 'zip_filename', 'preserve_extension' ) - single_download_view = 'documents:document_version_download' + viewname = 'documents:document_multiple_version_download' def get_extra_context(self): result = super( @@ -48,31 +47,12 @@ class DocumentVersionDownloadFormView(DocumentDownloadFormView): return result - def get_document_queryset(self): - id_list = self.request.GET.get( - 'id_list', self.request.POST.get('id_list', '') - ) - - if not id_list: - id_list = self.kwargs['pk'] - - return self.model.objects.filter( - pk__in=id_list.split(',') - ) - class DocumentVersionDownloadView(DocumentDownloadView): model = DocumentVersion - object_permission = permission_document_download + pk_url_kwarg = 'pk' - @staticmethod - def get_item_file(item): - return item.file - - def get_encoding(self): - return self.get_object().encoding - - def get_item_label(self, item): + def get_item_filename(self, item): preserve_extension = self.request.GET.get( 'preserve_extension', self.request.POST.get( 'preserve_extension', False @@ -83,9 +63,6 @@ class DocumentVersionDownloadView(DocumentDownloadView): return item.get_rendered_string(preserve_extension=preserve_extension) - def get_mimetype(self): - return self.get_object().mimetype - class DocumentVersionListView(ExternalObjectMixin, SingleObjectListView): external_object_class = Document diff --git a/mayan/apps/documents/views/document_views.py b/mayan/apps/documents/views/document_views.py index 4d2bf53ea6..fc9f4cb0ed 100644 --- a/mayan/apps/documents/views/document_views.py +++ b/mayan/apps/documents/views/document_views.py @@ -2,22 +2,25 @@ from __future__ import absolute_import, unicode_literals import logging +from furl import furl + +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 -from django.utils.http import urlencode +from django.utils.encoding import force_text from django.utils.translation import ugettext_lazy as _, ungettext from mayan.apps.acls.models import AccessControlList from mayan.apps.common.compressed_files import ZipArchive from mayan.apps.common.generics import ( - FormView, MultipleObjectConfirmActionView, MultipleObjectFormActionView, - SingleObjectDetailView, SingleObjectDownloadView, SingleObjectEditView, - SingleObjectListView + FormView, MultipleObjectConfirmActionView, MultipleObjectDownloadView, + MultipleObjectFormActionView, SingleObjectDetailView, + 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 ) @@ -29,11 +32,11 @@ from ..forms import ( DocumentTypeFilteredSelectForm, ) from ..icons import ( - icon_document_list, icon_document_list_recent_access, - icon_recent_added_document_list, icon_duplicated_document_list + icon_document_download, icon_document_list, + icon_document_list_recent_access, 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 +49,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__) @@ -153,55 +155,36 @@ class DocumentDocumentTypeEditView(MultipleObjectFormActionView): ) -class DocumentDownloadFormView(FormView): +class DocumentDownloadFormView(MultipleObjectFormActionView): form_class = DocumentDownloadForm model = Document - multiple_download_view = 'documents:document_multiple_download' + object_permission = permission_document_download + pk_url_kwarg = 'pk' querystring_form_fields = ('compressed', 'zip_filename') - single_download_view = 'documents:document_download' + viewname = 'documents:document_multiple_download' def form_valid(self, form): - querystring_dictionary = {} + # Turn a queryset into a comma separated list of primary keys + id_list = ','.join( + [ + force_text(pk) for pk in self.get_object_list().values_list('pk', flat=True) + ] + ) + # Construct URL with querystring to pass on to the next view + url = furl( + args={ + 'id_list': id_list + }, path=reverse(viewname=self.viewname) + ) + + # Pass the form field data as URL querystring to the next view for field in self.querystring_form_fields: data = form.cleaned_data[field] if data: - querystring_dictionary[field] = data + url.args[field] = data - querystring_dictionary.update( - { - 'id_list': ','.join( - map(str, self.queryset.values_list('pk', flat=True)) - ) - } - ) - - querystring = urlencode(querystring_dictionary, doseq=True) - - if self.queryset.count() > 1: - url = reverse(self.multiple_download_view) - else: - url = reverse( - viewname=self.single_download_view, kwargs={ - 'pk': self.queryset.first().pk - } - ) - - return HttpResponseRedirect( - redirect_to='{}?{}'.format(url, querystring) - ) - - def get_document_queryset(self): - id_list = self.request.GET.get( - 'id_list', self.request.POST.get('id_list', '') - ) - - if not id_list: - id_list = self.kwargs['pk'] - - return self.model.objects.filter( - pk__in=id_list.split(',') - ) + return HttpResponseRedirect(redirect_to=url.tostr()) def get_extra_context(self): subtemplates_list = [ @@ -209,17 +192,17 @@ class DocumentDownloadFormView(FormView): 'name': 'appearance/generic_list_items_subtemplate.html', 'context': { 'object_list': self.queryset, - 'hide_link': True, 'hide_links': True, - 'hide_multi_item_actions': True, + 'hide_multi_item_actions': True } } ] context = { + 'submit_icon_class': icon_document_download, 'submit_label': _('Download'), 'subtemplates_list': subtemplates_list, - 'title': _('Download documents'), + 'title': _('Download documents') } if self.queryset.count() == 1: @@ -229,21 +212,14 @@ class DocumentDownloadFormView(FormView): def get_form_kwargs(self): kwargs = super(DocumentDownloadFormView, self).get_form_kwargs() - self.queryset = self.get_queryset() + self.queryset = self.get_object_list() kwargs.update({'queryset': self.queryset}) return kwargs - def get_queryset(self): - return AccessControlList.objects.restrict_queryset( - permission=permission_document_download, - queryset=self.get_document_queryset(), user=self.request.user - ) - -class DocumentDownloadView(SingleObjectDownloadView): +class DocumentDownloadView(MultipleObjectDownloadView): model = Document - # Set to None to disable the .get_object call - object_permission = None + object_permission = permission_document_download @staticmethod def commit_event(item, request): @@ -253,45 +229,28 @@ 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 ) - @staticmethod - def get_item_file(item): - return item.open() - - def get_document_queryset(self): - id_list = self.request.GET.get( - 'id_list', self.request.POST.get('id_list', '') - ) - - if not id_list: - id_list = self.kwargs['pk'] - - queryset = self.model.objects.filter(pk__in=id_list.split(',')) - - return AccessControlList.objects.restrict_queryset( - permission=permission_document_download, queryset=queryset, - user=self.request.user - ) - - def get_file(self): - queryset = self.get_document_queryset() - zip_filename = self.request.GET.get( + def get_archive_filename(self): + return self.request.GET.get( 'zip_filename', DEFAULT_ZIP_FILENAME ) + def get_download_file_object(self): + queryset = self.get_object_list() + zip_filename = self.get_archive_filename() + if self.request.GET.get('compressed') == 'True' or queryset.count() > 1: compressed_file = ZipArchive() compressed_file.create() for item in queryset: - with DocumentDownloadView.get_item_file(item=item) as file_object: + with item.open() as file_object: compressed_file.add_file( file_object=file_object, - filename=self.get_item_label(item=item) + filename=self.get_item_filename(item=item) ) DocumentDownloadView.commit_event( item=item, request=self.request @@ -299,68 +258,25 @@ class DocumentDownloadView(SingleObjectDownloadView): compressed_file.close() - return DocumentDownloadView.VirtualFile( - compressed_file.as_file(zip_filename), name=zip_filename - ) + return compressed_file.as_file(zip_filename) else: item = queryset.first() - if item: - DocumentDownloadView.commit_event( - item=item, request=self.request - ) - else: - raise PermissionDenied - - return DocumentDownloadView.VirtualFile( - DocumentDownloadView.get_item_file(item=item), - name=self.get_item_label(item=item) + DocumentDownloadView.commit_event( + item=item, request=self.request ) + return item.open() - def get_item_label(self, item): + def get_download_filename(self): + queryset = self.get_object_list() + if self.request.GET.get('compressed') == 'True' or queryset.count() > 1: + return self.get_archive_filename() + else: + return self.get_item_filename(item=queryset.first()) + + def get_item_filename(self, item): 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 +438,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 +461,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 +589,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 7955cce60b..4dc76c0748 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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 6c4a4ac899..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 74d9db8d5b..4209ec60a2 100644 --- a/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/bg/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Lyudmil Antonov , 2019 # Pavlin Koldamov , 2012 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Roberto Rosario\n" +"POT-Creation-Date: 2019-12-18 00:28-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" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,57 +21,62 @@ msgstr "" #: apps.py:17 msgid "Dynamic search" -msgstr "" +msgstr "Динамично търсене" #: classes.py:100 msgid "No search model matching the query" -msgstr "" +msgstr "Няма модел за търсене, отговарящ на заявката" #: forms.py:9 msgid "Match all" -msgstr "" +msgstr "Съвпадение на всички" #: forms.py:10 msgid "" "When checked, only results that match all fields will be returned. When " "unchecked results that match at least one field will be returned." -msgstr "" +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 "" +msgstr "Подробно търсене" #: links.py:15 msgid "Search again" -msgstr "" +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 "" +msgstr "Подробно" #: views.py:25 msgid "Try again using different terms. " -msgstr "" +msgstr "Опитайте отново, като използвате различни термини." #: views.py:27 msgid "No search results" -msgstr "" +msgstr "Няма резултати от търсенето" #: views.py:29 #, python-format msgid "Search results for: %s" -msgstr "" +msgstr "Резултати от търсенето за: %s" #: views.py:74 #, python-format msgid "Search for: %s" -msgstr "" +msgstr "Търсене за: %s" 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 5c78af203e..8ec72d44fc 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Atdhe Tabaku \n" +"POT-Creation-Date: 2019-12-18 00:28-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 3f04617491..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 6db044699c..6f06a99299 100644 --- a/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.po +++ b/mayan/apps/dynamic_search/locale/cs/LC_MESSAGES/django.po @@ -3,12 +3,13 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Michal Švábík , 2019 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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" @@ -19,57 +20,62 @@ msgstr "" #: apps.py:17 msgid "Dynamic search" -msgstr "" +msgstr "Dynamické vyhledávání" #: classes.py:100 msgid "No search model matching the query" -msgstr "" +msgstr "Dotazu neodpovídá žádný vyhledávací model" #: forms.py:9 msgid "Match all" -msgstr "" +msgstr "Odpovídají všem" #: forms.py:10 msgid "" "When checked, only results that match all fields will be returned. When " "unchecked results that match at least one field will be returned." -msgstr "" +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 "" +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 "" +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 "" +msgstr "Pokročilé vyhledávání" #: links.py:15 msgid "Search again" +msgstr "Hledej znovu" + +#: settings.py:12 +msgid "" +"Disables the single term bar search leaving only the advanced search button." msgstr "" -#: templates/dynamic_search/search_box.html:24 +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" -msgstr "" +msgstr "Pokročilý" #: views.py:25 msgid "Try again using different terms. " -msgstr "" +msgstr "Zkuste to znovu pomocí různých termínů." #: views.py:27 msgid "No search results" -msgstr "" +msgstr "Bez výsledku" #: views.py:29 #, python-format msgid "Search results for: %s" -msgstr "" +msgstr "Výsledky hledání pro klíčové slovo: %s" #: views.py:74 #, python-format msgid "Search for: %s" -msgstr "" +msgstr "Vyhledejte: %s" 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 5c9ec1c9dc..34b2ceef74 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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 b566e961bb..f2d7e3ba2b 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-07-04 22:13+0000\n" -"Last-Translator: Mathias Behrle \n" +"POT-Creation-Date: 2019-12-18 00:28-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 a7fdcc3371..bd20e7d4f2 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Hmayag Antonian \n" +"POT-Creation-Date: 2019-12-18 00:28-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 ff4bbd99bb..3e8703ea13 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-09-24 23:12-0400\n" +"POT-Creation-Date: 2019-12-18 00:28-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 71c63a4c40..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 38cccf436b..c3e7301acd 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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 d801ce64b9..6be3faa732 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Mehdi Amani \n" +"POT-Creation-Date: 2019-12-18 00:28-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 ccd6b6f41e..811018381f 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Thierry Schott \n" +"POT-Creation-Date: 2019-12-18 00:28-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 9315abc02f..8189a8ee74 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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 ff7c64afad..08122dd49b 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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 079dca8bf8..17f79c25fa 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Marco Camplese \n" +"POT-Creation-Date: 2019-12-18 00:28-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 01197e2a2b..4f3c673ccc 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Māris Teivāns \n" +"POT-Creation-Date: 2019-12-18 00:28-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 73d970b9a3..a94b895961 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Justin Albstbstmeijer \n" +"POT-Creation-Date: 2019-12-18 00:28-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 c163c951ef..a0d90c2e02 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Wojciech Warczakowski \n" +"POT-Creation-Date: 2019-12-18 00:28-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 8230380de1..007f2067a4 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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 7f35d8c70b..fddd2ae821 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: Aline Freitas \n" +"POT-Creation-Date: 2019-12-18 00:28-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 d255cc037a..e3ef78e646 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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 6aec10ff87..6f48789e5c 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: lilo.panic\n" +"POT-Creation-Date: 2019-12-18 00:28-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 e15ccbd6b5..73a8f5bdf1 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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..2199ed8804 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 589fcf5a7e..c05c7d9e04 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 @@ -3,15 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# emreunal , 2019 # Nurgül Özkan , 2017 # serhatcan77 , 2017 msgid "" msgstr "" "Project-Id-Version: Mayan EDMS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" -"Last-Translator: serhatcan77 \n" +"POT-Creation-Date: 2019-12-18 00:28-0400\n" +"PO-Revision-Date: 2019-12-13 17:31+0000\n" +"Last-Translator: emreunal \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 +38,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,17 +55,22 @@ 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 "Tek bir terim ile arama barını devre dışı bırakarak geriye sadece gelişmiş arama butonunu bırakır." + +#: templates/dynamic_search/search_box.html:45 msgid "Advanced" msgstr "İleri düzey" #: views.py:25 msgid "Try again using different terms. " -msgstr "" +msgstr "Başka terimler kullanarak tekrar dene." #: views.py:27 msgid "No search results" -msgstr "" +msgstr "Arama sonucu bulunamadı" #: views.py:29 #, python-format 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 11082ee558..9dff04ae62 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-09-24 23:12-0400\n" -"PO-Revision-Date: 2019-06-15 07:49+0000\n" +"POT-Creation-Date: 2019-12-18 00:28-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 a809f8309e..28bb0e25b7 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-09-24 23:12-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-18 00:28-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 %}