mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Merge branch 'dev' into fix/issue-603
This commit is contained in:
		
							
								
								
									
										1
									
								
								.github/workflows/ansible.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/workflows/ansible.yml
									
									
									
									
										vendored
									
									
								
							| @@ -47,7 +47,6 @@ jobs: | ||||
|           molecule converge | ||||
|           molecule idempotence | ||||
|           molecule verify | ||||
|           molecule destroy | ||||
|         working-directory: "${{ github.repository }}" | ||||
|   # # https://galaxy.ansible.com/docs/contributing/importing.html | ||||
|   # release: | ||||
|   | ||||
| @@ -18,8 +18,9 @@ paperlessng_directory: /opt/paperless-ng | ||||
| paperlessng_consumption_dir: "{{ paperlessng_directory }}/consumption" | ||||
| paperlessng_data_dir: "{{ paperlessng_directory }}/data" | ||||
| paperlessng_media_root: "{{ paperlessng_directory }}/media" | ||||
| paperlessng_static_dir: "{{ paperlessng_directory }}/static" | ||||
| paperlessng_staticdir: "{{ paperlessng_directory }}/static" | ||||
| paperlessng_filename_format: | ||||
| paperlessng_logging_dir: "{{ paperlessng_data_dir }}/log" | ||||
| paperlessng_virtualenv: "{{ paperlessng_directory }}/.venv" | ||||
|  | ||||
| # Hosting & Security | ||||
| @@ -36,12 +37,15 @@ paperlessng_enable_http_remote_user: False | ||||
| paperlessng_ocr_languages: | ||||
|   - eng | ||||
| paperlessng_ocr_mode: skip | ||||
| paperlessng_ocr_clean: clean | ||||
| paperlessng_ocr_deskew: True | ||||
| paperlessng_ocr_rotate_pages: True | ||||
| paperlessng_ocr_rotate_pages_threshold: 12 | ||||
| paperlessng_ocr_output_type: pdfa | ||||
| paperlessng_ocr_pages: 0 | ||||
| paperlessng_ocr_image_dpi: | ||||
| # see https://ocrmypdf.readthedocs.io/en/latest/api.html#ocrmypdf.ocr | ||||
| paperlessng_ocr_user_args: | ||||
|   #- "deskew": True  # https://github.com/jonaswinkler/paperless-ng/issues/231 | ||||
|   - "optimize": 1 | ||||
| paperlessng_use_jbig2enc: True | ||||
| paperlessng_big2enc_lossy: False | ||||
| @@ -57,10 +61,11 @@ paperlessng_consumer_polling: 0 | ||||
| paperlessng_consumer_delete_duplicates: False | ||||
| paperlessng_consumer_recursive: False | ||||
| paperlessng_consumer_subdirs_as_tags: False | ||||
| paperlessng_convert_memory_limit: 0 | ||||
| paperlessng_convert_tmpdir: | ||||
| paperlessng_optimize_thumbnails: True | ||||
| paperlessng_post_consume_script: | ||||
| paperlessng_filename_date_order: | ||||
| paperlessng_filename_parse_transforms: | ||||
| paperlessng_thumbnail_font_name: /usr/share/fonts/liberation/LiberationSerif-Regular.ttf | ||||
| paperlessng_ignore_dates: "" | ||||
|  | ||||
|   | ||||
| @@ -2,9 +2,15 @@ | ||||
| - name: update previous release to newest release | ||||
|   hosts: all | ||||
|   tasks: | ||||
|     - name: install git dependency | ||||
|       apt: | ||||
|         pkg: git | ||||
|     - name: obtain latest git hash in current tree | ||||
|       command: git rev-parse HEAD | ||||
|       register: git_hash | ||||
|     - name: set current github commit as version when available | ||||
|       set_fact: | ||||
|         paperlessng_version: "{{ lookup('env', 'GITHUB_SHA') | default('master', True) }}" | ||||
|         paperlessng_version: "{{ git_hash.stdout }}" | ||||
|     - name: update to newest paperless-ng release | ||||
|       include_role: | ||||
|         name: ansible | ||||
|   | ||||
| @@ -43,7 +43,7 @@ | ||||
|  | ||||
| - name: install ocr languages | ||||
|   apt: | ||||
|     pkg: "{{ paperlessng_ocr_languages | map('regex_replace', '^(.*)$', 'tesseract-ocr-\\1') | list }}" | ||||
|     pkg: "{{ paperlessng_ocr_languages | map('regex_replace', '^(.*)$', 'tesseract-ocr-\\1') | map('replace', '_', '-') | list }}" | ||||
|  | ||||
| - name: set up notesalexp repository key (for jbig2enc) | ||||
|   apt_key: | ||||
| @@ -256,7 +256,7 @@ | ||||
|     - "{{ paperlessng_consumption_dir }}" | ||||
|     - "{{ paperlessng_data_dir }}" | ||||
|     - "{{ paperlessng_media_root }}" | ||||
|     - "{{ paperlessng_static_dir }}" | ||||
|     - "{{ paperlessng_staticdir }}" | ||||
|  | ||||
| - name: rename initial config | ||||
|   command: | ||||
| @@ -280,9 +280,11 @@ | ||||
|     - regexp: PAPERLESS_MEDIA_ROOT | ||||
|       line: "PAPERLESS_MEDIA_ROOT={{ paperlessng_media_root }}" | ||||
|     - regexp: PAPERLESS_STATICDIR | ||||
|       line: "PAPERLESS_STATICDIR={{ paperlessng_static_dir }}" | ||||
|       line: "PAPERLESS_STATICDIR={{ paperlessng_staticdir }}" | ||||
|     - regexp: PAPERLESS_FILENAME_FORMAT | ||||
|       line: "PAPERLESS_FILENAME_FORMAT={{ paperlessng_filename_format }}" | ||||
|     - regexp: PAPERLESS_LOGGING_DIR | ||||
|       line: "PAPERLESS_LOGGING_DIR={{ paperlessng_logging_dir }}" | ||||
|     # Hosting & Security | ||||
|     - regexp: PAPERLESS_SECRET_KEY | ||||
|       line: "PAPERLESS_SECRET_KEY={{ paperlessng_secret_key }}" | ||||
| @@ -302,9 +304,17 @@ | ||||
|       line: "PAPERLESS_ENABLE_HTTP_REMOTE_USER={{ paperlessng_enable_http_remote_user }}" | ||||
|     # OCR settings | ||||
|     - regexp: PAPERLESS_OCR_LANGUAGE | ||||
|       line: "PAPERLESS_OCR_LANGUAGE={{ paperlessng_ocr_languages | join('+') }}" | ||||
|       line: "PAPERLESS_OCR_LANGUAGE={{ paperlessng_ocr_languages | join('+') | replace('-','_') }}" | ||||
|     - regexp: PAPERLESS_OCR_MODE | ||||
|       line: "PAPERLESS_OCR_MODE={{ paperlessng_ocr_mode }}" | ||||
|     - regexp: PAPERLESS_OCR_CLEAN | ||||
|       line: "PAPERLESS_OCR_CLEAN={{ paperlessng_ocr_clean }}" | ||||
|     - regexp: PAPERLESS_OCR_DESKEW | ||||
|       line: "PAPERLESS_OCR_DESKEW={{ paperlessng_ocr_deskew }}" | ||||
|     - regexp: PAPERLESS_OCR_ROTATE_PAGES | ||||
|       line: "PAPERLESS_OCR_ROTATE_PAGES={{ paperlessng_ocr_rotate_pages }}" | ||||
|     - regexp: PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD | ||||
|       line: "PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD={{ paperlessng_ocr_rotate_pages_threshold }}" | ||||
|     - regexp: PAPERLESS_OCR_OUTPUT_TYPE | ||||
|       line: "PAPERLESS_OCR_OUTPUT_TYPE={{ paperlessng_ocr_output_type }}" | ||||
|     - regexp: PAPERLESS_OCR_PAGES | ||||
| @@ -331,6 +341,10 @@ | ||||
|       line: "PAPERLESS_CONSUMER_RECURSIVE={{ paperlessng_consumer_recursive }}" | ||||
|     - regexp: PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS | ||||
|       line: "PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS={{ paperlessng_consumer_subdirs_as_tags }}" | ||||
|     - regexp: PAPERLESS_CONVERT_MEMORY_LIMIT | ||||
|       line: "PAPERLESS_CONVERT_MEMORY_LIMIT={{ paperlessng_convert_memory_limit }}" | ||||
|     - regexp: PAPERLESS_CONVERT_TMPDIR | ||||
|       line: "PAPERLESS_CONVERT_TMPDIR={{ paperlessng_convert_tmpdir }}" | ||||
|     - regexp: PAPERLESS_OPTIMIZE_THUMBNAILS | ||||
|       line: "PAPERLESS_OPTIMIZE_THUMBNAILS={{ paperlessng_optimize_thumbnails }}" | ||||
|     - regexp: PAPERLESS_POST_CONSUME_SCRIPT | ||||
|   | ||||
| @@ -5,29 +5,82 @@ Paperless development | ||||
|  | ||||
| This section describes the steps you need to take to start development on paperless-ng. | ||||
|  | ||||
| 1.  Check out the source from github. The repository is organized in the following way: | ||||
| Check out the source from github. The repository is organized in the following way: | ||||
|  | ||||
|     *   ``master`` always represents the latest release and will only see changes | ||||
| *   ``master`` always represents the latest release and will only see changes | ||||
|     when a new release is made. | ||||
|     *   ``dev`` contains the code that will be in the next release. | ||||
|     *   ``feature-X`` contain bigger changes that will be in some release, but not | ||||
| *   ``dev`` contains the code that will be in the next release. | ||||
| *   ``feature-X`` contain bigger changes that will be in some release, but not | ||||
|     necessarily the next one. | ||||
|  | ||||
|     Apart from that, the folder structure is as follows: | ||||
| When making functional changes to paperless, *always* make your changes on the ``dev`` branch. | ||||
|  | ||||
|     *   ``docs/`` - Documentation. | ||||
|     *   ``src-ui/`` - Code of the front end. | ||||
|     *   ``src/`` - Code of the back end. | ||||
|     *   ``scripts/`` - Various scripts that help with different parts of development. | ||||
|     *   ``docker/`` - Files required to build the docker image. | ||||
| Apart from that, the folder structure is as follows: | ||||
|  | ||||
| 2.  Install some dependencies. | ||||
| *   ``docs/`` - Documentation. | ||||
| *   ``src-ui/`` - Code of the front end. | ||||
| *   ``src/`` - Code of the back end. | ||||
| *   ``scripts/`` - Various scripts that help with different parts of development. | ||||
| *   ``docker/`` - Files required to build the docker image. | ||||
|  | ||||
|     *   Python 3.6. | ||||
|     *   All dependencies listed in the :ref:`Bare metal route <setup-bare_metal>` | ||||
|     *   redis. You can either install redis or use the included scritps/start-services.sh | ||||
|         to use docker to fire up a redis instance (and some other services such as tika, | ||||
|         gotenberg and a postgresql server). | ||||
| Initial setup and first start  | ||||
| ============================= | ||||
|  | ||||
| After you forked and cloned the code from github you need to perform a first-time setup.  | ||||
| To do the setup you need to perform the steps from the following chapters in a certain order: | ||||
|  | ||||
| 1.  Install prerequisites + pipenv as mentioned in :ref:`Bare metal route <setup-bare_metal>` | ||||
| 2.  Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode. | ||||
| 3.  Install the Angular CLI interface: | ||||
|  | ||||
|     .. code:: shell-session | ||||
|  | ||||
|         $ npm install -g @angular/cli  | ||||
|  | ||||
| 4.  Create ``consume`` and ``media`` folders in the cloned root folder. | ||||
|     | ||||
|     .. code:: shell-session | ||||
|  | ||||
|         mkdir -p consume media | ||||
|  | ||||
| 5.  You can now either ... | ||||
|  | ||||
|     *  install redis or  | ||||
|     *  use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a postgresql server) or | ||||
|     *  spin up a bare redis container  | ||||
|  | ||||
|         .. code:: shell-session | ||||
|  | ||||
|             docker run -d -p 6379:6379 -restart unless-stopped redis:latest | ||||
|  | ||||
| 6.  Install the python dependencies by performing in the src/ directory. | ||||
|  | ||||
|     .. code:: shell-session | ||||
|  | ||||
|         pipenv install --dev | ||||
|  | ||||
| 7.  Generate the static UI so you can perform a login to get session that is required for frontend development (this needs to be done one time only). From root folder: | ||||
|  | ||||
|     .. code:: shell-session | ||||
|  | ||||
|         compile-frontend.sh | ||||
|  | ||||
| 8.  Apply migrations and create a superuser for your dev instance: | ||||
|  | ||||
|     .. code:: shell-session | ||||
|  | ||||
|         python3 manage.py migrate | ||||
|         python3 manage.py createsuperuser | ||||
|  | ||||
| 9.  Now spin up the dev backend. Depending on which part of paperless you're developing for, you need to have some or all of them running. | ||||
|  | ||||
|     .. code:: shell-session | ||||
|  | ||||
|         python3 manage.py runserver & python3 manage.py document_consumer & python3 manage.py qcluster | ||||
|  | ||||
| 10. Login with the superuser credentials provided in step 8 at ``http://localhost:8000`` to create a session that enables you to use the backend. | ||||
|   | ||||
| Backend development environment is now ready, to start Frontend development go to ``/src-ui`` and run ``ng serve``. From there you can use ``http://localhost:4200`` for a preview. | ||||
|  | ||||
| Back end development | ||||
| ==================== | ||||
| @@ -35,21 +88,18 @@ Back end development | ||||
| The backend is a django application. I use PyCharm for development, but you can use whatever | ||||
| you want. | ||||
|  | ||||
| Install the python dependencies by performing ``pipenv install --dev`` in the src/ directory. | ||||
| This will also create a virtual environment, which you can enter with ``pipenv shell`` or | ||||
| execute one-shot commands in with ``pipenv run``. | ||||
|  | ||||
| Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode. | ||||
|  | ||||
| Configure the IDE to use the src/ folder as the base source folder. Configure the following | ||||
| launch configurations in your IDE: | ||||
|  | ||||
| *   python3 manage.py runserver | ||||
| *   python3 manage.py qcluster | ||||
| *   python3 manage.py consumer | ||||
| *   python3 manage.py document_consumer | ||||
|  | ||||
| Depending on which part of paperless you're developing for, you need to have some or all of | ||||
| them running. | ||||
| To start them all: | ||||
|  | ||||
| .. code:: shell-session | ||||
|  | ||||
|     python3 manage.py runserver & python3 manage.py document_consumer & python3 manage.py qcluster | ||||
|  | ||||
| Testing and code style: | ||||
|  | ||||
| @@ -62,7 +112,7 @@ Testing and code style: | ||||
|  | ||||
|         The line length rule E501 is generally useful for getting multiple source files | ||||
|         next to each other on the screen. However, in some cases, its just not possible | ||||
|         to make some lines fit, especially complicated IF cases. Append ``  # NOQA: E501`` | ||||
|         to make some lines fit, especially complicated IF cases. Append ``# NOQA: E501`` | ||||
|         to disable this check for certain lines. | ||||
|  | ||||
| Front end development | ||||
| @@ -109,6 +159,92 @@ This will build the front end and put it in a location from which the Django ser | ||||
| it as static content. This way, you can verify that authentication is working. | ||||
|  | ||||
|  | ||||
| Localization | ||||
| ============ | ||||
|  | ||||
| Paperless is available in many different languages. Since paperless consists both of a django | ||||
| application and an Angular front end, both these parts have to be translated separately. | ||||
|  | ||||
| Front end localization | ||||
| ---------------------- | ||||
|  | ||||
| *   The Angular front end does localization according to the `Angular documentation <https://angular.io/guide/i18n>`_. | ||||
| *   The source language of the project is "en_US". | ||||
| *   The source strings end up in the file "src-ui/messages.xlf". | ||||
| *   The translated strings need to be placed in the "src-ui/src/locale/" folder. | ||||
| *   In order to extract added or changed strings from the source files, call ``ng xi18n --ivy``. | ||||
|  | ||||
| Adding new languages requires adding the translated files in the "src-ui/src/locale/" fodler and adjusting a couple files. | ||||
|  | ||||
| 1.  Adjust "src-ui/angular.json": | ||||
|  | ||||
|     .. code:: json | ||||
|  | ||||
|         "i18n": { | ||||
|             "sourceLocale": "en-US", | ||||
|             "locales": { | ||||
|                 "de": "src/locale/messages.de.xlf", | ||||
|                 "nl-NL": "src/locale/messages.nl_NL.xlf", | ||||
|                 "fr": "src/locale/messages.fr.xlf", | ||||
|                 "en-GB": "src/locale/messages.en_GB.xlf", | ||||
|                 "pt-BR": "src/locale/messages.pt_BR.xlf", | ||||
|                 "language-code": "language-file" | ||||
|             } | ||||
|         } | ||||
|  | ||||
| 2.  Add the language to the available options in "src-ui/src/app/services/settings.service.ts": | ||||
|  | ||||
|     .. code:: typescript | ||||
|  | ||||
|         getLanguageOptions(): LanguageOption[] { | ||||
|             return [ | ||||
|                 {code: "en-us", name: $localize`English (US)`, englishName: "English (US)", dateInputFormat: "mm/dd/yyyy"}, | ||||
|                 {code: "en-gb", name: $localize`English (GB)`, englishName: "English (GB)", dateInputFormat: "dd/mm/yyyy"}, | ||||
|                 {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"}, | ||||
|                 {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, | ||||
|                 {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, | ||||
|                 {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"} | ||||
|                 // Add your new language here | ||||
|             ] | ||||
|         } | ||||
|      | ||||
|     ``dateInputFormat`` is a special string that defines the behavior of the date input fields and absolutely needs to contain "dd", "mm" and "yyyy". | ||||
|  | ||||
| 3.  Import and register the Angular data for this locale in "src-ui/src/app/app.module.ts": | ||||
|  | ||||
|     .. code:: typescript | ||||
|  | ||||
|         import localeDe from '@angular/common/locales/de'; | ||||
|         registerLocaleData(localeDe) | ||||
|  | ||||
| Back end localization | ||||
| --------------------- | ||||
|  | ||||
| A majority of the strings that appear in the back end appear only when the admin is used. However, | ||||
| some of these are still shown on the front end (such as error messages). | ||||
|  | ||||
| *   The django application does localization according to the `django documentation <https://docs.djangoproject.com/en/3.1/topics/i18n/translation/>`_. | ||||
| *   The source language of the project is "en_US". | ||||
| *   Localization files end up in the folder "src/locale/". | ||||
| *   In order to extract strings from the application, call ``python3 manage.py makemessages -l en_US``. This is important after making changes to translatable strings. | ||||
| *   The message files need to be compiled for them to show up in the application. Call ``python3 manage.py compilemessages`` to do this. The generated files don't get | ||||
|     committed into git, since these are derived artifacts. The build pipeline takes care of executing this command. | ||||
|  | ||||
| Adding new languages requires adding the translated files in the "src/locale/" folder and adjusting the file "src/paperless/settings.py" to include the new language: | ||||
|  | ||||
| .. code:: python | ||||
|  | ||||
|     LANGUAGES = [ | ||||
|         ("en-us", _("English (US)")), | ||||
|         ("en-gb", _("English (GB)")), | ||||
|         ("de", _("German")), | ||||
|         ("nl-nl", _("Dutch")), | ||||
|         ("fr", _("French")), | ||||
|         ("pt-br", _("Portuguese (Brazil)")), | ||||
|         # Add language here. | ||||
|     ] | ||||
|  | ||||
|  | ||||
| Building the documentation | ||||
| ========================== | ||||
|  | ||||
|   | ||||
| @@ -284,6 +284,12 @@ writing. Windows is not and will never be supported. | ||||
|     *   ``libmagic-dev`` for mime type detection | ||||
|     *   ``mime-support`` for mime type detection | ||||
|  | ||||
|     Use this list for your preferred package management: | ||||
|  | ||||
|     .. code::  | ||||
|  | ||||
|         python3 python3-pip python3-dev imagemagick fonts-liberation optipng gnupg libpq-dev libmagic-dev mime-support | ||||
|  | ||||
|     These dependencies are required for OCRmyPDF, which is used for text recognition. | ||||
|  | ||||
|     *   ``unpaper`` | ||||
| @@ -297,6 +303,12 @@ writing. Windows is not and will never be supported. | ||||
|     *   ``tesseract-ocr`` >= 4.0.0 for OCR | ||||
|     *   ``tesseract-ocr`` language packs (``tesseract-ocr-eng``, ``tesseract-ocr-deu``, etc) | ||||
|  | ||||
|     Use this list for your preferred package management: | ||||
|  | ||||
|     .. code::  | ||||
|  | ||||
|         unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr | ||||
|  | ||||
|     On Raspberry Pi, these libraries are required as well: | ||||
|  | ||||
|     *   ``libatlas-base-dev`` | ||||
|   | ||||
| @@ -20,7 +20,8 @@ | ||||
| 					"nl-NL": "src/locale/messages.nl_NL.xlf", | ||||
| 					"fr": "src/locale/messages.fr.xlf", | ||||
| 					"en-GB": "src/locale/messages.en_GB.xlf", | ||||
| 					"pt-BR": "src/locale/messages.pt_BR.xlf" | ||||
| 					"pt-BR": "src/locale/messages.pt_BR.xlf", | ||||
| 					"it": "src/locale/messages.it.xlf" | ||||
| 				} | ||||
| 			}, | ||||
| 			"architect": { | ||||
|   | ||||
| @@ -419,7 +419,7 @@ | ||||
|         <source>Do you really want to delete the tag "<x id="PH" equiv-text="object.name"/>"?</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> | ||||
|           <context context-type="linenumber">30</context> | ||||
|           <context context-type="linenumber">26</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="cafc87479686947e2590b9f588a88040aeaf660b" datatype="html"> | ||||
| @@ -867,28 +867,28 @@ | ||||
|         <source>Create new tag</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> | ||||
|           <context context-type="linenumber">21</context> | ||||
|           <context context-type="linenumber">22</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="5872175735754226507" datatype="html"> | ||||
|         <source>Edit tag</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> | ||||
|           <context context-type="linenumber">25</context> | ||||
|           <context context-type="linenumber">26</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42" datatype="html"> | ||||
|         <source>Inbox tag</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> | ||||
|           <context context-type="linenumber">21</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077" datatype="html"> | ||||
|         <source>Inbox tags are automatically assigned to all consumed documents.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> | ||||
|           <context context-type="linenumber">21</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="6672809941092516947" datatype="html"> | ||||
| @@ -1128,28 +1128,28 @@ | ||||
|         <source>Last 7 days</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> | ||||
|           <context context-type="linenumber">24</context> | ||||
|           <context context-type="linenumber">34</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="4463380307954693363" datatype="html"> | ||||
|         <source>Last month</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> | ||||
|           <context context-type="linenumber">25</context> | ||||
|           <context context-type="linenumber">35</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="8697368973702409683" datatype="html"> | ||||
|         <source>Last 3 months</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> | ||||
|           <context context-type="linenumber">26</context> | ||||
|           <context context-type="linenumber">36</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="3566342898065860218" datatype="html"> | ||||
|         <source>Last year</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> | ||||
|           <context context-type="linenumber">27</context> | ||||
|           <context context-type="linenumber">37</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad" datatype="html"> | ||||
| @@ -1163,7 +1163,7 @@ | ||||
|         <source>Before</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> | ||||
|           <context context-type="linenumber">29</context> | ||||
|           <context context-type="linenumber">38</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46" datatype="html"> | ||||
| @@ -1602,7 +1602,7 @@ | ||||
|         <source>Invalid date.</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|           <context context-type="linenumber">14</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2807800733729323332" datatype="html"> | ||||
| @@ -1668,11 +1668,18 @@ | ||||
|           <context context-type="linenumber">93</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2935232983274991580" datatype="html"> | ||||
|         <source>Italian</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/settings.service.ts</context> | ||||
|           <context context-type="linenumber">94</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="4912706592792948707" datatype="html"> | ||||
|         <source>ISO 8601</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/settings.service.ts</context> | ||||
|           <context context-type="linenumber">98</context> | ||||
|           <context context-type="linenumber">99</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2119857572761283468" datatype="html"> | ||||
| @@ -1833,97 +1840,6 @@ | ||||
|           <context context-type="linenumber">23</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2056433880533904076" datatype="html"> | ||||
|         <source>Light blue</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">6</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="4082253113407591781" datatype="html"> | ||||
|         <source>Blue</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">7</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1143414876575720034" datatype="html"> | ||||
|         <source>Light green</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">8</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="119581980963263815" datatype="html"> | ||||
|         <source>Green</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">9</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="3250646524116252719" datatype="html"> | ||||
|         <source>Light red</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">10</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1628552745302385832" datatype="html"> | ||||
|         <source>Red </source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">11</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="5479028842846122610" datatype="html"> | ||||
|         <source>Light orange</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">12</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="8598918991528773310" datatype="html"> | ||||
|         <source>Orange</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1789283185177957430" datatype="html"> | ||||
|         <source>Light violet</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">14</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="2682868487071320453" datatype="html"> | ||||
|         <source>Violet</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">15</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="1449010446077321264" datatype="html"> | ||||
|         <source>Brown</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">16</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="30300572504753589" datatype="html"> | ||||
|         <source>Black</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">17</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="461048771215121187" datatype="html"> | ||||
|         <source>Light grey</source> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">18</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit id="4561076822163447092" datatype="html"> | ||||
|         <source>Create new item</source> | ||||
|         <context-group purpose="location"> | ||||
|   | ||||
| @@ -70,12 +70,14 @@ import localeFr from '@angular/common/locales/fr'; | ||||
| import localeNl from '@angular/common/locales/nl'; | ||||
| import localeDe from '@angular/common/locales/de'; | ||||
| import localePt from '@angular/common/locales/pt'; | ||||
| import localeIt from '@angular/common/locales/it'; | ||||
| import localeEnGb from '@angular/common/locales/en-GB'; | ||||
|  | ||||
| registerLocaleData(localeFr) | ||||
| registerLocaleData(localeNl) | ||||
| registerLocaleData(localeDe) | ||||
| registerLocaleData(localePt, "pt-BR") | ||||
| registerLocaleData(localeIt) | ||||
| registerLocaleData(localeEnGb) | ||||
|  | ||||
| @NgModule({ | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| <div class="card mb-3 shadow-sm" [class.card-selected]="selected" [class.document-card]="selectable"> | ||||
|   <div class="row no-gutters"> | ||||
|     <div class="col-md-2 d-none d-lg-block doc-img-background rounded-left" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> | ||||
|       <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left"> | ||||
|       <img [src]="getThumbUrl()" class="card-img doc-img border-right rounded-left" [class.inverted]="getIsThumbInverted()"> | ||||
|  | ||||
|       <div style="top: 0; left: 0" class="position-absolute border-right border-bottom bg-light p-1" [class.document-card-check]="!selected"> | ||||
|         <div class="custom-control custom-checkbox"> | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; | ||||
| import { DomSanitizer } from '@angular/platform-browser'; | ||||
| import { PaperlessDocument } from 'src/app/data/paperless-document'; | ||||
| import { DocumentService } from 'src/app/services/rest/document.service'; | ||||
| import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-document-card-large', | ||||
| @@ -10,7 +11,7 @@ import { DocumentService } from 'src/app/services/rest/document.service'; | ||||
| }) | ||||
| export class DocumentCardLargeComponent implements OnInit { | ||||
|  | ||||
|   constructor(private documentService: DocumentService, private sanitizer: DomSanitizer) { } | ||||
|   constructor(private documentService: DocumentService, private sanitizer: DomSanitizer, private settingsService: SettingsService) { } | ||||
|  | ||||
|   @Input() | ||||
|   selected = false | ||||
| @@ -53,6 +54,10 @@ export class DocumentCardLargeComponent implements OnInit { | ||||
|   ngOnInit(): void { | ||||
|   } | ||||
|  | ||||
|   getIsThumbInverted() { | ||||
|     return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED) | ||||
|   } | ||||
|  | ||||
|   getDetailsAsString() { | ||||
|     if (typeof this.details === 'string') { | ||||
|       return this.details.substring(0, 500) | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| <div class="col p-2 h-100"> | ||||
|   <div class="card h-100 shadow-sm document-card" [class.card-selected]="selected"> | ||||
|     <div class="border-bottom doc-img-container" [class.doc-img-background-selected]="selected" (click)="this.toggleSelected.emit($event)"> | ||||
|       <img class="card-img doc-img rounded-top" [src]="getThumbUrl()"> | ||||
|       <img class="card-img doc-img rounded-top" [class.inverted]="getIsThumbInverted()" [src]="getThumbUrl()"> | ||||
|  | ||||
|       <div class="border-right border-bottom bg-light p-1 rounded document-card-check"> | ||||
|         <div class="custom-control custom-checkbox"> | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; | ||||
| import { map } from 'rxjs/operators'; | ||||
| import { PaperlessDocument } from 'src/app/data/paperless-document'; | ||||
| import { DocumentService } from 'src/app/services/rest/document.service'; | ||||
| import { SettingsService, SETTINGS_KEYS } from 'src/app/services/settings.service'; | ||||
|  | ||||
| @Component({ | ||||
|   selector: 'app-document-card-small', | ||||
| @@ -10,7 +11,7 @@ import { DocumentService } from 'src/app/services/rest/document.service'; | ||||
| }) | ||||
| export class DocumentCardSmallComponent implements OnInit { | ||||
|  | ||||
|   constructor(private documentService: DocumentService) { } | ||||
|   constructor(private documentService: DocumentService, private settingsService: SettingsService) { } | ||||
|  | ||||
|   @Input() | ||||
|   selected = false | ||||
| @@ -32,6 +33,10 @@ export class DocumentCardSmallComponent implements OnInit { | ||||
|   ngOnInit(): void { | ||||
|   } | ||||
|  | ||||
|   getIsThumbInverted() { | ||||
|     return this.settingsService.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED) | ||||
|   } | ||||
|  | ||||
|   getThumbUrl() { | ||||
|     return this.documentService.getThumbUrl(this.document.id) | ||||
|   } | ||||
|   | ||||
| @@ -96,6 +96,7 @@ | ||||
|           <div class="col"> | ||||
|             <app-input-check i18n-title title="Use system settings" formControlName="darkModeUseSystem"></app-input-check> | ||||
|             <app-input-check [hidden]="settingsForm.value.darkModeUseSystem" i18n-title title="Enable dark mode" formControlName="darkModeEnabled"></app-input-check> | ||||
|             <app-input-check i18n-title title="Invert Thumbnails in dark mode" formControlName="darkModeInvertThumbs"></app-input-check> | ||||
|           </div> | ||||
|         </div> | ||||
|  | ||||
|   | ||||
| @@ -21,6 +21,7 @@ export class SettingsComponent implements OnInit { | ||||
|     'documentListItemPerPage': new FormControl(this.settings.get(SETTINGS_KEYS.DOCUMENT_LIST_SIZE)), | ||||
|     'darkModeUseSystem': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM)), | ||||
|     'darkModeEnabled': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_ENABLED)), | ||||
|     'darkModeInvertThumbs': new FormControl(this.settings.get(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED)), | ||||
|     'useNativePdfViewer': new FormControl(this.settings.get(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER)), | ||||
|     'savedViews': this.savedViewGroup, | ||||
|     'displayLanguage': new FormControl(this.settings.getLanguage()), | ||||
| @@ -74,6 +75,7 @@ export class SettingsComponent implements OnInit { | ||||
|     this.settings.set(SETTINGS_KEYS.DOCUMENT_LIST_SIZE, this.settingsForm.value.documentListItemPerPage) | ||||
|     this.settings.set(SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, this.settingsForm.value.darkModeUseSystem) | ||||
|     this.settings.set(SETTINGS_KEYS.DARK_MODE_ENABLED, (this.settingsForm.value.darkModeEnabled == true).toString()) | ||||
|     this.settings.set(SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, (this.settingsForm.value.darkModeInvertThumbs == true).toString()) | ||||
|     this.settings.set(SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, this.settingsForm.value.useNativePdfViewer) | ||||
|     this.settings.set(SETTINGS_KEYS.DATE_LOCALE, this.settingsForm.value.dateLocale) | ||||
|     this.settings.set(SETTINGS_KEYS.DATE_FORMAT, this.settingsForm.value.dateFormat) | ||||
|   | ||||
| @@ -26,6 +26,7 @@ export const SETTINGS_KEYS = { | ||||
|   DOCUMENT_LIST_SIZE: 'general-settings:documentListSize', | ||||
|   DARK_MODE_USE_SYSTEM: 'general-settings:dark-mode:use-system', | ||||
|   DARK_MODE_ENABLED: 'general-settings:dark-mode:enabled', | ||||
|   DARK_MODE_THUMB_INVERTED: 'general-settings:dark-mode:thumb-inverted', | ||||
|   USE_NATIVE_PDF_VIEWER: 'general-settings:document-details:native-pdf-viewer', | ||||
|   DATE_LOCALE: 'general-settings:date-display:date-locale', | ||||
|   DATE_FORMAT: 'general-settings:date-display:date-format', | ||||
| @@ -41,6 +42,7 @@ const SETTINGS: PaperlessSettings[] = [ | ||||
|   {key: SETTINGS_KEYS.DOCUMENT_LIST_SIZE, type: "number", default: 50}, | ||||
|   {key: SETTINGS_KEYS.DARK_MODE_USE_SYSTEM, type: "boolean", default: true}, | ||||
|   {key: SETTINGS_KEYS.DARK_MODE_ENABLED, type: "boolean", default: false}, | ||||
|   {key: SETTINGS_KEYS.DARK_MODE_THUMB_INVERTED, type: "boolean", default: true}, | ||||
|   {key: SETTINGS_KEYS.USE_NATIVE_PDF_VIEWER, type: "boolean", default: false}, | ||||
|   {key: SETTINGS_KEYS.DATE_LOCALE, type: "string", default: ""}, | ||||
|   {key: SETTINGS_KEYS.DATE_FORMAT, type: "string", default: "mediumDate"}, | ||||
| @@ -90,7 +92,8 @@ export class SettingsService { | ||||
|       {code: "de", name: $localize`German`, englishName: "German", dateInputFormat: "dd.mm.yyyy"}, | ||||
|       {code: "nl", name: $localize`Dutch`, englishName: "Dutch", dateInputFormat: "dd-mm-yyyy"}, | ||||
|       {code: "fr", name: $localize`French`, englishName: "French", dateInputFormat: "dd/mm/yyyy"}, | ||||
|       {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"} | ||||
|       {code: "pt-br", name: $localize`Portuguese (Brazil)`, englishName: "Portuguese (Brazil)", dateInputFormat: "dd/mm/yyyy"}, | ||||
|       {code: "it", name: $localize`Italian`, englishName: "Italian", dateInputFormat: "dd/mm/yyyy"} | ||||
|     ] | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -478,7 +478,7 @@ | ||||
|         <target>Möchten Sie das Tag "<x equiv-text="object.name" id="PH"/>" wirklich löschen?</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-list.component.ts</context> | ||||
|           <context context-type="linenumber">30</context> | ||||
|           <context context-type="linenumber">26</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="cafc87479686947e2590b9f588a88040aeaf660b"> | ||||
| @@ -990,7 +990,7 @@ | ||||
|         <target>Neues Tag erstellen</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> | ||||
|           <context context-type="linenumber">21</context> | ||||
|           <context context-type="linenumber">22</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="5872175735754226507"> | ||||
| @@ -998,7 +998,7 @@ | ||||
|         <target>Tag bearbeiten</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.ts</context> | ||||
|           <context context-type="linenumber">25</context> | ||||
|           <context context-type="linenumber">26</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="f2a30b4e1a89a8a0db0bd147b54d6626b9a9bc42"> | ||||
| @@ -1006,7 +1006,7 @@ | ||||
|         <target>Posteingangs-Tag</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> | ||||
|           <context context-type="linenumber">21</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="5e2f1a4ea12a1b8606ee3f0548d0ba64bf266077"> | ||||
| @@ -1014,7 +1014,7 @@ | ||||
|         <target>Ein Tag mit dieser Option wird automatisch allen neuen Dokumenten zugewiesen.</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component.html</context> | ||||
|           <context context-type="linenumber">21</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="6672809941092516947"> | ||||
| @@ -1288,7 +1288,7 @@ | ||||
|         <target>Letzte 7 Tage</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> | ||||
|           <context context-type="linenumber">24</context> | ||||
|           <context context-type="linenumber">34</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="4463380307954693363"> | ||||
| @@ -1296,7 +1296,7 @@ | ||||
|         <target>Letzten Monat</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> | ||||
|           <context context-type="linenumber">25</context> | ||||
|           <context context-type="linenumber">35</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="8697368973702409683"> | ||||
| @@ -1304,7 +1304,7 @@ | ||||
|         <target>Letzte 3 Monate</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> | ||||
|           <context context-type="linenumber">26</context> | ||||
|           <context context-type="linenumber">36</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="3566342898065860218"> | ||||
| @@ -1312,7 +1312,7 @@ | ||||
|         <target>Letztes Jahr</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.ts</context> | ||||
|           <context context-type="linenumber">27</context> | ||||
|           <context context-type="linenumber">37</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="be2add3a3d9e4e2556b8f9048a15a9c0f00bf1ad"> | ||||
| @@ -1328,7 +1328,7 @@ | ||||
|         <target>Vor</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/date-dropdown/date-dropdown.component.html</context> | ||||
|           <context context-type="linenumber">29</context> | ||||
|           <context context-type="linenumber">38</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="99ee4faa69cd2ea8e3678c1f557c0ff1f05aae46"> | ||||
| @@ -1829,7 +1829,7 @@ | ||||
|         <target>Ungültiges Datum.</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/components/common/input/date/date.component.html</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|           <context context-type="linenumber">14</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="2807800733729323332"> | ||||
| @@ -1904,12 +1904,20 @@ | ||||
|           <context context-type="linenumber">93</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="2935232983274991580"> | ||||
|         <source>Italian</source> | ||||
|         <target>Italienisch</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/settings.service.ts</context> | ||||
|           <context context-type="linenumber">94</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="4912706592792948707"> | ||||
|         <source>ISO 8601</source> | ||||
|         <target>ISO 8601</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/services/settings.service.ts</context> | ||||
|           <context context-type="linenumber">98</context> | ||||
|           <context context-type="linenumber">99</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="2119857572761283468"> | ||||
| @@ -2092,110 +2100,6 @@ | ||||
|           <context context-type="linenumber">23</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="2056433880533904076"> | ||||
|         <source>Light blue</source> | ||||
|         <target>Blau, hell</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">6</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="4082253113407591781"> | ||||
|         <source>Blue</source> | ||||
|         <target>Blau</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">7</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="1143414876575720034"> | ||||
|         <source>Light green</source> | ||||
|         <target>Grün, hell</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">8</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="119581980963263815"> | ||||
|         <source>Green</source> | ||||
|         <target>Grün</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">9</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="3250646524116252719"> | ||||
|         <source>Light red</source> | ||||
|         <target>Rot, hell</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">10</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="1628552745302385832"> | ||||
|         <source>Red </source> | ||||
|         <target>Rot</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">11</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="5479028842846122610"> | ||||
|         <source>Light orange</source> | ||||
|         <target>Orange, hell</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">12</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="8598918991528773310"> | ||||
|         <source>Orange</source> | ||||
|         <target>Orange</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">13</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="1789283185177957430"> | ||||
|         <source>Light violet</source> | ||||
|         <target>Violet, hell</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">14</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="2682868487071320453"> | ||||
|         <source>Violet</source> | ||||
|         <target>Violet</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">15</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="1449010446077321264"> | ||||
|         <source>Brown</source> | ||||
|         <target>Braun</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">16</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="30300572504753589"> | ||||
|         <source>Black</source> | ||||
|         <target>Schwarz</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">17</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="461048771215121187"> | ||||
|         <source>Light grey</source> | ||||
|         <target>Grau, hell</target> | ||||
|         <context-group purpose="location"> | ||||
|           <context context-type="sourcefile">src/app/data/paperless-tag.ts</context> | ||||
|           <context context-type="linenumber">18</context> | ||||
|         </context-group> | ||||
|       </trans-unit> | ||||
|       <trans-unit datatype="html" id="4561076822163447092"> | ||||
|         <source>Create new item</source> | ||||
|         <target>Neues Element erstellen</target> | ||||
|   | ||||
							
								
								
									
										2353
									
								
								src-ui/src/locale/messages.it.xlf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2353
									
								
								src-ui/src/locale/messages.it.xlf
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -143,15 +143,18 @@ $border-color-dark-mode: #47494f; | ||||
|  | ||||
|   .doc-img { | ||||
|     mix-blend-mode: normal; | ||||
|     filter: invert(95%) hue-rotate(180deg); | ||||
|     border-radius: 0; | ||||
|     border-color: $bg-dark-mode; | ||||
|  | ||||
|     filter: invert(10%); | ||||
|     &.border-right { | ||||
|       border-right: none !important; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .doc-img.inverted { | ||||
|     filter: invert(95%) hue-rotate(180deg); | ||||
|   } | ||||
|  | ||||
|   .card-selected .doc-img { | ||||
|     mix-blend-mode: luminosity; | ||||
|   } | ||||
|   | ||||
| @@ -1356,3 +1356,16 @@ class TestApiAuth(APITestCase): | ||||
|         self.assertEqual(self.client.get("/api/documents/bulk_edit/").status_code, 401) | ||||
|         self.assertEqual(self.client.get("/api/documents/bulk_download/").status_code, 401) | ||||
|         self.assertEqual(self.client.get("/api/documents/selection_data/").status_code, 401) | ||||
|  | ||||
|     def test_api_version_no_auth(self): | ||||
|  | ||||
|         response = self.client.get("/api/") | ||||
|         self.assertNotIn("X-Api-Version", response) | ||||
|         self.assertNotIn("X-Version", response) | ||||
|  | ||||
|     def test_api_version_with_auth(self): | ||||
|         user = User.objects.create_superuser(username="test") | ||||
|         self.client.force_login(user) | ||||
|         response = self.client.get("/api/") | ||||
|         self.assertIn("X-Api-Version", response) | ||||
|         self.assertIn("X-Version", response) | ||||
|   | ||||
| @@ -11,7 +11,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2021-02-24 16:49+0100\n" | ||||
| "POT-Creation-Date: 2021-02-26 12:56+0100\n" | ||||
| "PO-Revision-Date: 2021-02-16 18:37+0000\n" | ||||
| "Last-Translator: Jonas Winkler, 2021\n" | ||||
| "Language-Team: German (https://www.transifex.com/paperless/teams/115905/de/)\n" | ||||
| @@ -49,7 +49,7 @@ msgstr "Ungenaues Wort" | ||||
| msgid "Automatic" | ||||
| msgstr "Automatisch" | ||||
|  | ||||
| #: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 | ||||
| #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 | ||||
| #: paperless_mail/models.py:109 | ||||
| msgid "name" | ||||
| msgstr "Name" | ||||
| @@ -66,7 +66,7 @@ msgstr "Zuweisungsalgorithmus" | ||||
| msgid "is insensitive" | ||||
| msgstr "Groß-/Kleinschreibung irrelevant" | ||||
|  | ||||
| #: documents/models.py:74 documents/models.py:134 | ||||
| #: documents/models.py:74 documents/models.py:120 | ||||
| msgid "correspondent" | ||||
| msgstr "Korrespondent" | ||||
|  | ||||
| @@ -74,15 +74,15 @@ msgstr "Korrespondent" | ||||
| msgid "correspondents" | ||||
| msgstr "Korrespondenten" | ||||
|  | ||||
| #: documents/models.py:97 | ||||
| #: documents/models.py:81 | ||||
| msgid "color" | ||||
| msgstr "Farbe" | ||||
|  | ||||
| #: documents/models.py:101 | ||||
| #: documents/models.py:87 | ||||
| msgid "is inbox tag" | ||||
| msgstr "Posteingangs-Tag" | ||||
|  | ||||
| #: documents/models.py:103 | ||||
| #: documents/models.py:89 | ||||
| msgid "" | ||||
| "Marks this tag as an inbox tag: All newly consumed documents will be tagged " | ||||
| "with inbox tags." | ||||
| @@ -90,39 +90,39 @@ msgstr "" | ||||
| "Markiert das Tag als Posteingangs-Tag. Neue Dokumente werden immer mit " | ||||
| "diesem Tag versehen." | ||||
|  | ||||
| #: documents/models.py:108 | ||||
| #: documents/models.py:94 | ||||
| msgid "tag" | ||||
| msgstr "Tag" | ||||
|  | ||||
| #: documents/models.py:109 documents/models.py:165 | ||||
| #: documents/models.py:95 documents/models.py:151 | ||||
| msgid "tags" | ||||
| msgstr "Tags" | ||||
|  | ||||
| #: documents/models.py:115 documents/models.py:147 | ||||
| #: documents/models.py:101 documents/models.py:133 | ||||
| msgid "document type" | ||||
| msgstr "Dokumenttyp" | ||||
|  | ||||
| #: documents/models.py:116 | ||||
| #: documents/models.py:102 | ||||
| msgid "document types" | ||||
| msgstr "Dokumenttypen" | ||||
|  | ||||
| #: documents/models.py:124 | ||||
| #: documents/models.py:110 | ||||
| msgid "Unencrypted" | ||||
| msgstr "Nicht verschlüsselt" | ||||
|  | ||||
| #: documents/models.py:125 | ||||
| #: documents/models.py:111 | ||||
| msgid "Encrypted with GNU Privacy Guard" | ||||
| msgstr "Verschlüsselt mit GNU Privacy Guard" | ||||
|  | ||||
| #: documents/models.py:138 | ||||
| #: documents/models.py:124 | ||||
| msgid "title" | ||||
| msgstr "Titel" | ||||
|  | ||||
| #: documents/models.py:151 | ||||
| #: documents/models.py:137 | ||||
| msgid "content" | ||||
| msgstr "Inhalt" | ||||
|  | ||||
| #: documents/models.py:153 | ||||
| #: documents/models.py:139 | ||||
| msgid "" | ||||
| "The raw, text-only data of the document. This field is primarily used for " | ||||
| "searching." | ||||
| @@ -130,241 +130,245 @@ msgstr "" | ||||
| "Der Inhalt des Dokuments in Textform. Dieses Feld wird primär für die Suche " | ||||
| "verwendet." | ||||
|  | ||||
| #: documents/models.py:158 | ||||
| #: documents/models.py:144 | ||||
| msgid "mime type" | ||||
| msgstr "MIME-Typ" | ||||
|  | ||||
| #: documents/models.py:169 | ||||
| #: documents/models.py:155 | ||||
| msgid "checksum" | ||||
| msgstr "Prüfsumme" | ||||
|  | ||||
| #: documents/models.py:173 | ||||
| #: documents/models.py:159 | ||||
| msgid "The checksum of the original document." | ||||
| msgstr "Die Prüfsumme des originalen Dokuments." | ||||
|  | ||||
| #: documents/models.py:177 | ||||
| #: documents/models.py:163 | ||||
| msgid "archive checksum" | ||||
| msgstr "Archiv-Prüfsumme" | ||||
|  | ||||
| #: documents/models.py:182 | ||||
| #: documents/models.py:168 | ||||
| msgid "The checksum of the archived document." | ||||
| msgstr "Die Prüfsumme des archivierten Dokuments." | ||||
|  | ||||
| #: documents/models.py:186 documents/models.py:342 | ||||
| #: documents/models.py:172 documents/models.py:328 | ||||
| msgid "created" | ||||
| msgstr "Ausgestellt" | ||||
|  | ||||
| #: documents/models.py:190 | ||||
| #: documents/models.py:176 | ||||
| msgid "modified" | ||||
| msgstr "Geändert" | ||||
|  | ||||
| #: documents/models.py:194 | ||||
| #: documents/models.py:180 | ||||
| msgid "storage type" | ||||
| msgstr "Speichertyp" | ||||
|  | ||||
| #: documents/models.py:202 | ||||
| #: documents/models.py:188 | ||||
| msgid "added" | ||||
| msgstr "Hinzugefügt" | ||||
|  | ||||
| #: documents/models.py:206 | ||||
| #: documents/models.py:192 | ||||
| msgid "filename" | ||||
| msgstr "Dateiname" | ||||
|  | ||||
| #: documents/models.py:212 | ||||
| #: documents/models.py:198 | ||||
| msgid "Current filename in storage" | ||||
| msgstr "Aktueller Dateiname im Datenspeicher" | ||||
|  | ||||
| #: documents/models.py:216 | ||||
| #: documents/models.py:202 | ||||
| msgid "archive filename" | ||||
| msgstr "Archiv-Dateiname" | ||||
|  | ||||
| #: documents/models.py:222 | ||||
| #: documents/models.py:208 | ||||
| msgid "Current archive filename in storage" | ||||
| msgstr "Aktueller Dateiname im Archiv" | ||||
|  | ||||
| #: documents/models.py:226 | ||||
| #: documents/models.py:212 | ||||
| msgid "archive serial number" | ||||
| msgstr "Archiv-Seriennummer" | ||||
|  | ||||
| #: documents/models.py:231 | ||||
| #: documents/models.py:217 | ||||
| msgid "The position of this document in your physical document archive." | ||||
| msgstr "Die Position dieses Dokuments in Ihrem physischen Dokumentenarchiv." | ||||
|  | ||||
| #: documents/models.py:237 | ||||
| #: documents/models.py:223 | ||||
| msgid "document" | ||||
| msgstr "Dokument" | ||||
|  | ||||
| #: documents/models.py:238 | ||||
| #: documents/models.py:224 | ||||
| msgid "documents" | ||||
| msgstr "Dokumente" | ||||
|  | ||||
| #: documents/models.py:325 | ||||
| #: documents/models.py:311 | ||||
| msgid "debug" | ||||
| msgstr "Debug" | ||||
|  | ||||
| #: documents/models.py:326 | ||||
| #: documents/models.py:312 | ||||
| msgid "information" | ||||
| msgstr "Information" | ||||
|  | ||||
| #: documents/models.py:327 | ||||
| #: documents/models.py:313 | ||||
| msgid "warning" | ||||
| msgstr "Warnung" | ||||
|  | ||||
| #: documents/models.py:328 | ||||
| #: documents/models.py:314 | ||||
| msgid "error" | ||||
| msgstr "Fehler" | ||||
|  | ||||
| #: documents/models.py:329 | ||||
| #: documents/models.py:315 | ||||
| msgid "critical" | ||||
| msgstr "Kritisch" | ||||
|  | ||||
| #: documents/models.py:333 | ||||
| #: documents/models.py:319 | ||||
| msgid "group" | ||||
| msgstr "Gruppe" | ||||
|  | ||||
| #: documents/models.py:336 | ||||
| #: documents/models.py:322 | ||||
| msgid "message" | ||||
| msgstr "Nachricht" | ||||
|  | ||||
| #: documents/models.py:339 | ||||
| #: documents/models.py:325 | ||||
| msgid "level" | ||||
| msgstr "Level" | ||||
|  | ||||
| #: documents/models.py:346 | ||||
| #: documents/models.py:332 | ||||
| msgid "log" | ||||
| msgstr "Protokoll" | ||||
|  | ||||
| #: documents/models.py:347 | ||||
| #: documents/models.py:333 | ||||
| msgid "logs" | ||||
| msgstr "Protokoll" | ||||
|  | ||||
| #: documents/models.py:358 documents/models.py:408 | ||||
| #: documents/models.py:344 documents/models.py:394 | ||||
| msgid "saved view" | ||||
| msgstr "Gespeicherte Ansicht" | ||||
|  | ||||
| #: documents/models.py:359 | ||||
| #: documents/models.py:345 | ||||
| msgid "saved views" | ||||
| msgstr "Gespeicherte Ansichten" | ||||
|  | ||||
| #: documents/models.py:362 | ||||
| #: documents/models.py:348 | ||||
| msgid "user" | ||||
| msgstr "Benutzer" | ||||
|  | ||||
| #: documents/models.py:368 | ||||
| #: documents/models.py:354 | ||||
| msgid "show on dashboard" | ||||
| msgstr "Auf Startseite zeigen" | ||||
|  | ||||
| #: documents/models.py:371 | ||||
| #: documents/models.py:357 | ||||
| msgid "show in sidebar" | ||||
| msgstr "In Seitenleiste zeigen" | ||||
|  | ||||
| #: documents/models.py:375 | ||||
| #: documents/models.py:361 | ||||
| msgid "sort field" | ||||
| msgstr "Sortierfeld" | ||||
|  | ||||
| #: documents/models.py:378 | ||||
| #: documents/models.py:364 | ||||
| msgid "sort reverse" | ||||
| msgstr "Umgekehrte Sortierung" | ||||
|  | ||||
| #: documents/models.py:384 | ||||
| #: documents/models.py:370 | ||||
| msgid "title contains" | ||||
| msgstr "Titel enthält" | ||||
|  | ||||
| #: documents/models.py:385 | ||||
| #: documents/models.py:371 | ||||
| msgid "content contains" | ||||
| msgstr "Inhalt enthält" | ||||
|  | ||||
| #: documents/models.py:386 | ||||
| #: documents/models.py:372 | ||||
| msgid "ASN is" | ||||
| msgstr "ASN ist" | ||||
|  | ||||
| #: documents/models.py:387 | ||||
| #: documents/models.py:373 | ||||
| msgid "correspondent is" | ||||
| msgstr "Korrespondent ist" | ||||
|  | ||||
| #: documents/models.py:388 | ||||
| #: documents/models.py:374 | ||||
| msgid "document type is" | ||||
| msgstr "Dokumenttyp ist" | ||||
|  | ||||
| #: documents/models.py:389 | ||||
| #: documents/models.py:375 | ||||
| msgid "is in inbox" | ||||
| msgstr "Ist im Posteingang" | ||||
|  | ||||
| #: documents/models.py:390 | ||||
| #: documents/models.py:376 | ||||
| msgid "has tag" | ||||
| msgstr "Hat Tag" | ||||
|  | ||||
| #: documents/models.py:391 | ||||
| #: documents/models.py:377 | ||||
| msgid "has any tag" | ||||
| msgstr "Hat irgendein Tag" | ||||
|  | ||||
| #: documents/models.py:392 | ||||
| #: documents/models.py:378 | ||||
| msgid "created before" | ||||
| msgstr "Ausgestellt vor" | ||||
|  | ||||
| #: documents/models.py:393 | ||||
| #: documents/models.py:379 | ||||
| msgid "created after" | ||||
| msgstr "Ausgestellt nach" | ||||
|  | ||||
| #: documents/models.py:394 | ||||
| #: documents/models.py:380 | ||||
| msgid "created year is" | ||||
| msgstr "Ausgestellt im Jahr" | ||||
|  | ||||
| #: documents/models.py:395 | ||||
| #: documents/models.py:381 | ||||
| msgid "created month is" | ||||
| msgstr "Ausgestellt im Monat" | ||||
|  | ||||
| #: documents/models.py:396 | ||||
| #: documents/models.py:382 | ||||
| msgid "created day is" | ||||
| msgstr "Ausgestellt am Tag" | ||||
|  | ||||
| #: documents/models.py:397 | ||||
| #: documents/models.py:383 | ||||
| msgid "added before" | ||||
| msgstr "Hinzugefügt vor" | ||||
|  | ||||
| #: documents/models.py:398 | ||||
| #: documents/models.py:384 | ||||
| msgid "added after" | ||||
| msgstr "Hinzugefügt nach" | ||||
|  | ||||
| #: documents/models.py:399 | ||||
| #: documents/models.py:385 | ||||
| msgid "modified before" | ||||
| msgstr "Geändert vor" | ||||
|  | ||||
| #: documents/models.py:400 | ||||
| #: documents/models.py:386 | ||||
| msgid "modified after" | ||||
| msgstr "Geändert nach" | ||||
|  | ||||
| #: documents/models.py:401 | ||||
| #: documents/models.py:387 | ||||
| msgid "does not have tag" | ||||
| msgstr "Hat nicht folgendes Tag" | ||||
|  | ||||
| #: documents/models.py:412 | ||||
| #: documents/models.py:398 | ||||
| msgid "rule type" | ||||
| msgstr "Regeltyp" | ||||
|  | ||||
| #: documents/models.py:416 | ||||
| #: documents/models.py:402 | ||||
| msgid "value" | ||||
| msgstr "Wert" | ||||
|  | ||||
| #: documents/models.py:422 | ||||
| #: documents/models.py:408 | ||||
| msgid "filter rule" | ||||
| msgstr "Filterregel" | ||||
|  | ||||
| #: documents/models.py:423 | ||||
| #: documents/models.py:409 | ||||
| msgid "filter rules" | ||||
| msgstr "Filterregeln" | ||||
|  | ||||
| #: documents/serialisers.py:52 | ||||
| #: documents/serialisers.py:53 | ||||
| #, python-format | ||||
| msgid "Invalid regular expresssion: %(error)s" | ||||
| msgstr "Ungültiger regulärer Ausdruck: %(error)s" | ||||
|  | ||||
| #: documents/serialisers.py:378 | ||||
| #: documents/serialisers.py:177 | ||||
| msgid "Invalid color." | ||||
| msgstr "Ungültige Farbe." | ||||
|  | ||||
| #: documents/serialisers.py:451 | ||||
| #, python-format | ||||
| msgid "File type %(type)s not supported" | ||||
| msgstr "Dateityp %(type)s nicht unterstützt" | ||||
|  | ||||
| #: documents/templates/index.html:20 | ||||
| #: documents/templates/index.html:21 | ||||
| msgid "Paperless-ng is loading..." | ||||
| msgstr "Paperless-ng wird geladen..." | ||||
|  | ||||
| @@ -406,30 +410,34 @@ msgstr "Passwort" | ||||
| msgid "Sign in" | ||||
| msgstr "Anmelden" | ||||
|  | ||||
| #: paperless/settings.py:291 | ||||
| #: paperless/settings.py:297 | ||||
| msgid "English (US)" | ||||
| msgstr "Englisch (US)" | ||||
|  | ||||
| #: paperless/settings.py:292 | ||||
| #: paperless/settings.py:298 | ||||
| msgid "English (GB)" | ||||
| msgstr "Englisch (UK)" | ||||
|  | ||||
| #: paperless/settings.py:293 | ||||
| #: paperless/settings.py:299 | ||||
| msgid "German" | ||||
| msgstr "Deutsch" | ||||
|  | ||||
| #: paperless/settings.py:294 | ||||
| #: paperless/settings.py:300 | ||||
| msgid "Dutch" | ||||
| msgstr "Niederländisch" | ||||
|  | ||||
| #: paperless/settings.py:295 | ||||
| #: paperless/settings.py:301 | ||||
| msgid "French" | ||||
| msgstr "Französisch" | ||||
|  | ||||
| #: paperless/settings.py:296 | ||||
| #: paperless/settings.py:302 | ||||
| msgid "Portuguese (Brazil)" | ||||
| msgstr "Portugiesisch (Brasilien)" | ||||
|  | ||||
| #: paperless/settings.py:303 | ||||
| msgid "Italian" | ||||
| msgstr "Italienisch" | ||||
|  | ||||
| #: paperless/urls.py:118 | ||||
| msgid "Paperless-ng administration" | ||||
| msgstr "Paperless-ng Administration" | ||||
|   | ||||
| @@ -8,7 +8,7 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2021-02-24 16:49+0100\n" | ||||
| "POT-Creation-Date: 2021-02-26 12:56+0100\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
| @@ -45,7 +45,7 @@ msgstr "" | ||||
| msgid "Automatic" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 | ||||
| #: documents/models.py:41 documents/models.py:350 paperless_mail/models.py:25 | ||||
| #: paperless_mail/models.py:109 | ||||
| msgid "name" | ||||
| msgstr "" | ||||
| @@ -62,7 +62,7 @@ msgstr "" | ||||
| msgid "is insensitive" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:74 documents/models.py:134 | ||||
| #: documents/models.py:74 documents/models.py:120 | ||||
| msgid "correspondent" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -70,293 +70,297 @@ msgstr "" | ||||
| msgid "correspondents" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:97 | ||||
| #: documents/models.py:81 | ||||
| msgid "color" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:101 | ||||
| #: documents/models.py:87 | ||||
| msgid "is inbox tag" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:103 | ||||
| #: documents/models.py:89 | ||||
| msgid "" | ||||
| "Marks this tag as an inbox tag: All newly consumed documents will be tagged " | ||||
| "with inbox tags." | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:108 | ||||
| #: documents/models.py:94 | ||||
| msgid "tag" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:109 documents/models.py:165 | ||||
| #: documents/models.py:95 documents/models.py:151 | ||||
| msgid "tags" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:115 documents/models.py:147 | ||||
| #: documents/models.py:101 documents/models.py:133 | ||||
| msgid "document type" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:116 | ||||
| #: documents/models.py:102 | ||||
| msgid "document types" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:124 | ||||
| #: documents/models.py:110 | ||||
| msgid "Unencrypted" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:125 | ||||
| #: documents/models.py:111 | ||||
| msgid "Encrypted with GNU Privacy Guard" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:138 | ||||
| #: documents/models.py:124 | ||||
| msgid "title" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:151 | ||||
| #: documents/models.py:137 | ||||
| msgid "content" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:153 | ||||
| #: documents/models.py:139 | ||||
| msgid "" | ||||
| "The raw, text-only data of the document. This field is primarily used for " | ||||
| "searching." | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:158 | ||||
| #: documents/models.py:144 | ||||
| msgid "mime type" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:169 | ||||
| #: documents/models.py:155 | ||||
| msgid "checksum" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:173 | ||||
| #: documents/models.py:159 | ||||
| msgid "The checksum of the original document." | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:177 | ||||
| #: documents/models.py:163 | ||||
| msgid "archive checksum" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:182 | ||||
| #: documents/models.py:168 | ||||
| msgid "The checksum of the archived document." | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:186 documents/models.py:342 | ||||
| #: documents/models.py:172 documents/models.py:328 | ||||
| msgid "created" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:190 | ||||
| #: documents/models.py:176 | ||||
| msgid "modified" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:194 | ||||
| #: documents/models.py:180 | ||||
| msgid "storage type" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:202 | ||||
| #: documents/models.py:188 | ||||
| msgid "added" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:206 | ||||
| #: documents/models.py:192 | ||||
| msgid "filename" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:212 | ||||
| #: documents/models.py:198 | ||||
| msgid "Current filename in storage" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:216 | ||||
| #: documents/models.py:202 | ||||
| msgid "archive filename" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:222 | ||||
| #: documents/models.py:208 | ||||
| msgid "Current archive filename in storage" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:226 | ||||
| #: documents/models.py:212 | ||||
| msgid "archive serial number" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:231 | ||||
| #: documents/models.py:217 | ||||
| msgid "The position of this document in your physical document archive." | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:237 | ||||
| #: documents/models.py:223 | ||||
| msgid "document" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:238 | ||||
| #: documents/models.py:224 | ||||
| msgid "documents" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:325 | ||||
| #: documents/models.py:311 | ||||
| msgid "debug" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:326 | ||||
| #: documents/models.py:312 | ||||
| msgid "information" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:327 | ||||
| #: documents/models.py:313 | ||||
| msgid "warning" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:328 | ||||
| #: documents/models.py:314 | ||||
| msgid "error" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:329 | ||||
| #: documents/models.py:315 | ||||
| msgid "critical" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:333 | ||||
| #: documents/models.py:319 | ||||
| msgid "group" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:336 | ||||
| #: documents/models.py:322 | ||||
| msgid "message" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:339 | ||||
| #: documents/models.py:325 | ||||
| msgid "level" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:346 | ||||
| #: documents/models.py:332 | ||||
| msgid "log" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:347 | ||||
| #: documents/models.py:333 | ||||
| msgid "logs" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:358 documents/models.py:408 | ||||
| #: documents/models.py:344 documents/models.py:394 | ||||
| msgid "saved view" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:359 | ||||
| #: documents/models.py:345 | ||||
| msgid "saved views" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:362 | ||||
| #: documents/models.py:348 | ||||
| msgid "user" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:368 | ||||
| #: documents/models.py:354 | ||||
| msgid "show on dashboard" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:371 | ||||
| #: documents/models.py:357 | ||||
| msgid "show in sidebar" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:375 | ||||
| #: documents/models.py:361 | ||||
| msgid "sort field" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:378 | ||||
| #: documents/models.py:364 | ||||
| msgid "sort reverse" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:384 | ||||
| #: documents/models.py:370 | ||||
| msgid "title contains" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:385 | ||||
| #: documents/models.py:371 | ||||
| msgid "content contains" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:386 | ||||
| #: documents/models.py:372 | ||||
| msgid "ASN is" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:387 | ||||
| #: documents/models.py:373 | ||||
| msgid "correspondent is" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:388 | ||||
| #: documents/models.py:374 | ||||
| msgid "document type is" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:389 | ||||
| #: documents/models.py:375 | ||||
| msgid "is in inbox" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:390 | ||||
| #: documents/models.py:376 | ||||
| msgid "has tag" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:391 | ||||
| #: documents/models.py:377 | ||||
| msgid "has any tag" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:392 | ||||
| #: documents/models.py:378 | ||||
| msgid "created before" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:393 | ||||
| #: documents/models.py:379 | ||||
| msgid "created after" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:394 | ||||
| #: documents/models.py:380 | ||||
| msgid "created year is" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:395 | ||||
| #: documents/models.py:381 | ||||
| msgid "created month is" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:396 | ||||
| #: documents/models.py:382 | ||||
| msgid "created day is" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:397 | ||||
| #: documents/models.py:383 | ||||
| msgid "added before" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:398 | ||||
| #: documents/models.py:384 | ||||
| msgid "added after" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:399 | ||||
| #: documents/models.py:385 | ||||
| msgid "modified before" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:400 | ||||
| #: documents/models.py:386 | ||||
| msgid "modified after" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:401 | ||||
| #: documents/models.py:387 | ||||
| msgid "does not have tag" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:412 | ||||
| #: documents/models.py:398 | ||||
| msgid "rule type" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:416 | ||||
| #: documents/models.py:402 | ||||
| msgid "value" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:422 | ||||
| #: documents/models.py:408 | ||||
| msgid "filter rule" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/models.py:423 | ||||
| #: documents/models.py:409 | ||||
| msgid "filter rules" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/serialisers.py:52 | ||||
| #: documents/serialisers.py:53 | ||||
| #, python-format | ||||
| msgid "Invalid regular expresssion: %(error)s" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/serialisers.py:378 | ||||
| #: documents/serialisers.py:177 | ||||
| msgid "Invalid color." | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/serialisers.py:451 | ||||
| #, python-format | ||||
| msgid "File type %(type)s not supported" | ||||
| msgstr "" | ||||
|  | ||||
| #: documents/templates/index.html:20 | ||||
| #: documents/templates/index.html:21 | ||||
| msgid "Paperless-ng is loading..." | ||||
| msgstr "" | ||||
|  | ||||
| @@ -396,30 +400,34 @@ msgstr "" | ||||
| msgid "Sign in" | ||||
| msgstr "" | ||||
|  | ||||
| #: paperless/settings.py:291 | ||||
| #: paperless/settings.py:297 | ||||
| msgid "English (US)" | ||||
| msgstr "" | ||||
|  | ||||
| #: paperless/settings.py:292 | ||||
| #: paperless/settings.py:298 | ||||
| msgid "English (GB)" | ||||
| msgstr "" | ||||
|  | ||||
| #: paperless/settings.py:293 | ||||
| #: paperless/settings.py:299 | ||||
| msgid "German" | ||||
| msgstr "" | ||||
|  | ||||
| #: paperless/settings.py:294 | ||||
| #: paperless/settings.py:300 | ||||
| msgid "Dutch" | ||||
| msgstr "" | ||||
|  | ||||
| #: paperless/settings.py:295 | ||||
| #: paperless/settings.py:301 | ||||
| msgid "French" | ||||
| msgstr "" | ||||
|  | ||||
| #: paperless/settings.py:296 | ||||
| #: paperless/settings.py:302 | ||||
| msgid "Portuguese (Brazil)" | ||||
| msgstr "" | ||||
|  | ||||
| #: paperless/settings.py:303 | ||||
| msgid "Italian" | ||||
| msgstr "" | ||||
|  | ||||
| #: paperless/urls.py:118 | ||||
| msgid "Paperless-ng administration" | ||||
| msgstr "" | ||||
|   | ||||
							
								
								
									
										673
									
								
								src/locale/it/LC_MESSAGES/django.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										673
									
								
								src/locale/it/LC_MESSAGES/django.po
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,673 @@ | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| #  | ||||
| # Translators: | ||||
| # Ioma Taani, 2021 | ||||
| # Jonas Winkler, 2021 | ||||
| # Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021 | ||||
| #  | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2021-02-24 16:49+0100\n" | ||||
| "PO-Revision-Date: 2021-02-16 18:37+0000\n" | ||||
| "Last-Translator: Oliver Thomas Cervera <cervera93-10@yahoo.it>, 2021\n" | ||||
| "Language-Team: Italian (https://www.transifex.com/paperless/teams/115905/it/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: it\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| #: documents/apps.py:10 | ||||
| msgid "Documents" | ||||
| msgstr "Documenti" | ||||
|  | ||||
| #: documents/models.py:32 | ||||
| msgid "Any word" | ||||
| msgstr "Qualsiasi parola" | ||||
|  | ||||
| #: documents/models.py:33 | ||||
| msgid "All words" | ||||
| msgstr "Tutte le parole" | ||||
|  | ||||
| #: documents/models.py:34 | ||||
| msgid "Exact match" | ||||
| msgstr "Corrispondenza esatta" | ||||
|  | ||||
| #: documents/models.py:35 | ||||
| msgid "Regular expression" | ||||
| msgstr "Espressione regolare" | ||||
|  | ||||
| #: documents/models.py:36 | ||||
| msgid "Fuzzy word" | ||||
| msgstr "Parole fuzzy" | ||||
|  | ||||
| #: documents/models.py:37 | ||||
| msgid "Automatic" | ||||
| msgstr "Automatico" | ||||
|  | ||||
| #: documents/models.py:41 documents/models.py:364 paperless_mail/models.py:25 | ||||
| #: paperless_mail/models.py:109 | ||||
| msgid "name" | ||||
| msgstr "nome" | ||||
|  | ||||
| #: documents/models.py:45 | ||||
| msgid "match" | ||||
| msgstr "corrispondenza" | ||||
|  | ||||
| #: documents/models.py:49 | ||||
| msgid "matching algorithm" | ||||
| msgstr "algoritmo di corrispondenza" | ||||
|  | ||||
| #: documents/models.py:55 | ||||
| msgid "is insensitive" | ||||
| msgstr "non distingue maiuscole e minuscole" | ||||
|  | ||||
| #: documents/models.py:74 documents/models.py:134 | ||||
| msgid "correspondent" | ||||
| msgstr "corrispondente" | ||||
|  | ||||
| #: documents/models.py:75 | ||||
| msgid "correspondents" | ||||
| msgstr "corrispondenti" | ||||
|  | ||||
| #: documents/models.py:97 | ||||
| msgid "color" | ||||
| msgstr "colore" | ||||
|  | ||||
| #: documents/models.py:101 | ||||
| msgid "is inbox tag" | ||||
| msgstr "è tag di arrivo" | ||||
|  | ||||
| #: documents/models.py:103 | ||||
| msgid "" | ||||
| "Marks this tag as an inbox tag: All newly consumed documents will be tagged " | ||||
| "with inbox tags." | ||||
| msgstr "" | ||||
| "Contrassegna questo tag come tag in arrivo: tutti i documenti elaborati " | ||||
| "verranno taggati con questo tag." | ||||
|  | ||||
| #: documents/models.py:108 | ||||
| msgid "tag" | ||||
| msgstr "tag" | ||||
|  | ||||
| #: documents/models.py:109 documents/models.py:165 | ||||
| msgid "tags" | ||||
| msgstr "tag" | ||||
|  | ||||
| #: documents/models.py:115 documents/models.py:147 | ||||
| msgid "document type" | ||||
| msgstr "tipo di documento" | ||||
|  | ||||
| #: documents/models.py:116 | ||||
| msgid "document types" | ||||
| msgstr "tipi di documento" | ||||
|  | ||||
| #: documents/models.py:124 | ||||
| msgid "Unencrypted" | ||||
| msgstr "Non criptato" | ||||
|  | ||||
| #: documents/models.py:125 | ||||
| msgid "Encrypted with GNU Privacy Guard" | ||||
| msgstr "Criptato con GNU Privacy Guard" | ||||
|  | ||||
| #: documents/models.py:138 | ||||
| msgid "title" | ||||
| msgstr "titolo" | ||||
|  | ||||
| #: documents/models.py:151 | ||||
| msgid "content" | ||||
| msgstr "contenuto" | ||||
|  | ||||
| #: documents/models.py:153 | ||||
| msgid "" | ||||
| "The raw, text-only data of the document. This field is primarily used for " | ||||
| "searching." | ||||
| msgstr "" | ||||
| "I dati grezzi o solo testo del documento. Questo campo è usato " | ||||
| "principalmente per la ricerca." | ||||
|  | ||||
| #: documents/models.py:158 | ||||
| msgid "mime type" | ||||
| msgstr "tipo mime" | ||||
|  | ||||
| #: documents/models.py:169 | ||||
| msgid "checksum" | ||||
| msgstr "checksum" | ||||
|  | ||||
| #: documents/models.py:173 | ||||
| msgid "The checksum of the original document." | ||||
| msgstr "Il checksum del documento originale." | ||||
|  | ||||
| #: documents/models.py:177 | ||||
| msgid "archive checksum" | ||||
| msgstr "checksum dell'archivio" | ||||
|  | ||||
| #: documents/models.py:182 | ||||
| msgid "The checksum of the archived document." | ||||
| msgstr "Il checksum del documento archiviato." | ||||
|  | ||||
| #: documents/models.py:186 documents/models.py:342 | ||||
| msgid "created" | ||||
| msgstr "creato il" | ||||
|  | ||||
| #: documents/models.py:190 | ||||
| msgid "modified" | ||||
| msgstr "modificato il" | ||||
|  | ||||
| #: documents/models.py:194 | ||||
| msgid "storage type" | ||||
| msgstr "tipo di storage" | ||||
|  | ||||
| #: documents/models.py:202 | ||||
| msgid "added" | ||||
| msgstr "aggiunto il" | ||||
|  | ||||
| #: documents/models.py:206 | ||||
| msgid "filename" | ||||
| msgstr "nome del file" | ||||
|  | ||||
| #: documents/models.py:212 | ||||
| msgid "Current filename in storage" | ||||
| msgstr "Nome del file corrente nello storage" | ||||
|  | ||||
| #: documents/models.py:216 | ||||
| msgid "archive filename" | ||||
| msgstr "Nome file in archivio" | ||||
|  | ||||
| #: documents/models.py:222 | ||||
| msgid "Current archive filename in storage" | ||||
| msgstr "Il nome del file nell'archiviazione" | ||||
|  | ||||
| #: documents/models.py:226 | ||||
| msgid "archive serial number" | ||||
| msgstr "numero seriale dell'archivio" | ||||
|  | ||||
| #: documents/models.py:231 | ||||
| msgid "The position of this document in your physical document archive." | ||||
| msgstr "Posizione di questo documento all'interno dell'archivio fisico." | ||||
|  | ||||
| #: documents/models.py:237 | ||||
| msgid "document" | ||||
| msgstr "documento" | ||||
|  | ||||
| #: documents/models.py:238 | ||||
| msgid "documents" | ||||
| msgstr "documenti" | ||||
|  | ||||
| #: documents/models.py:325 | ||||
| msgid "debug" | ||||
| msgstr "debug" | ||||
|  | ||||
| #: documents/models.py:326 | ||||
| msgid "information" | ||||
| msgstr "informazione" | ||||
|  | ||||
| #: documents/models.py:327 | ||||
| msgid "warning" | ||||
| msgstr "avvertimento" | ||||
|  | ||||
| #: documents/models.py:328 | ||||
| msgid "error" | ||||
| msgstr "errore" | ||||
|  | ||||
| #: documents/models.py:329 | ||||
| msgid "critical" | ||||
| msgstr "critico" | ||||
|  | ||||
| #: documents/models.py:333 | ||||
| msgid "group" | ||||
| msgstr "gruppo" | ||||
|  | ||||
| #: documents/models.py:336 | ||||
| msgid "message" | ||||
| msgstr "messaggio" | ||||
|  | ||||
| #: documents/models.py:339 | ||||
| msgid "level" | ||||
| msgstr "livello" | ||||
|  | ||||
| #: documents/models.py:346 | ||||
| msgid "log" | ||||
| msgstr "log" | ||||
|  | ||||
| #: documents/models.py:347 | ||||
| msgid "logs" | ||||
| msgstr "log" | ||||
|  | ||||
| #: documents/models.py:358 documents/models.py:408 | ||||
| msgid "saved view" | ||||
| msgstr "vista salvata" | ||||
|  | ||||
| #: documents/models.py:359 | ||||
| msgid "saved views" | ||||
| msgstr "viste salvate" | ||||
|  | ||||
| #: documents/models.py:362 | ||||
| msgid "user" | ||||
| msgstr "utente" | ||||
|  | ||||
| #: documents/models.py:368 | ||||
| msgid "show on dashboard" | ||||
| msgstr "mostra sul cruscotto" | ||||
|  | ||||
| #: documents/models.py:371 | ||||
| msgid "show in sidebar" | ||||
| msgstr "mostra nella barra laterale" | ||||
|  | ||||
| #: documents/models.py:375 | ||||
| msgid "sort field" | ||||
| msgstr "campo di ordinamento" | ||||
|  | ||||
| #: documents/models.py:378 | ||||
| msgid "sort reverse" | ||||
| msgstr "ordine invertito" | ||||
|  | ||||
| #: documents/models.py:384 | ||||
| msgid "title contains" | ||||
| msgstr "il titolo contiene" | ||||
|  | ||||
| #: documents/models.py:385 | ||||
| msgid "content contains" | ||||
| msgstr "il contenuto contiene" | ||||
|  | ||||
| #: documents/models.py:386 | ||||
| msgid "ASN is" | ||||
| msgstr "ASN è" | ||||
|  | ||||
| #: documents/models.py:387 | ||||
| msgid "correspondent is" | ||||
| msgstr "la corrispondenza è" | ||||
|  | ||||
| #: documents/models.py:388 | ||||
| msgid "document type is" | ||||
| msgstr "il tipo di documento è" | ||||
|  | ||||
| #: documents/models.py:389 | ||||
| msgid "is in inbox" | ||||
| msgstr "è in arrivo" | ||||
|  | ||||
| #: documents/models.py:390 | ||||
| msgid "has tag" | ||||
| msgstr "ha etichetta" | ||||
|  | ||||
| #: documents/models.py:391 | ||||
| msgid "has any tag" | ||||
| msgstr "ha qualsiasi etichetta" | ||||
|  | ||||
| #: documents/models.py:392 | ||||
| msgid "created before" | ||||
| msgstr "creato prima del" | ||||
|  | ||||
| #: documents/models.py:393 | ||||
| msgid "created after" | ||||
| msgstr "creato dopo il" | ||||
|  | ||||
| #: documents/models.py:394 | ||||
| msgid "created year is" | ||||
| msgstr "l'anno di creazione è" | ||||
|  | ||||
| #: documents/models.py:395 | ||||
| msgid "created month is" | ||||
| msgstr "il mese di creazione è" | ||||
|  | ||||
| #: documents/models.py:396 | ||||
| msgid "created day is" | ||||
| msgstr "il giorno di creazione è" | ||||
|  | ||||
| #: documents/models.py:397 | ||||
| msgid "added before" | ||||
| msgstr "aggiunto prima del" | ||||
|  | ||||
| #: documents/models.py:398 | ||||
| msgid "added after" | ||||
| msgstr "aggiunto dopo il" | ||||
|  | ||||
| #: documents/models.py:399 | ||||
| msgid "modified before" | ||||
| msgstr "modificato prima del" | ||||
|  | ||||
| #: documents/models.py:400 | ||||
| msgid "modified after" | ||||
| msgstr "modificato dopo" | ||||
|  | ||||
| #: documents/models.py:401 | ||||
| msgid "does not have tag" | ||||
| msgstr "non ha tag" | ||||
|  | ||||
| #: documents/models.py:412 | ||||
| msgid "rule type" | ||||
| msgstr "tipo di regola" | ||||
|  | ||||
| #: documents/models.py:416 | ||||
| msgid "value" | ||||
| msgstr "valore" | ||||
|  | ||||
| #: documents/models.py:422 | ||||
| msgid "filter rule" | ||||
| msgstr "regola filtro" | ||||
|  | ||||
| #: documents/models.py:423 | ||||
| msgid "filter rules" | ||||
| msgstr "regole filtro" | ||||
|  | ||||
| #: documents/serialisers.py:52 | ||||
| #, python-format | ||||
| msgid "Invalid regular expresssion: %(error)s" | ||||
| msgstr "Espressione regolare non valida: %(error)s" | ||||
|  | ||||
| #: documents/serialisers.py:378 | ||||
| #, python-format | ||||
| msgid "File type %(type)s not supported" | ||||
| msgstr "Il tipo di file %(type)s non è supportato" | ||||
|  | ||||
| #: documents/templates/index.html:20 | ||||
| msgid "Paperless-ng is loading..." | ||||
| msgstr "Paperless-ng si sta caricando..." | ||||
|  | ||||
| #: documents/templates/registration/logged_out.html:13 | ||||
| msgid "Paperless-ng signed out" | ||||
| msgstr "Paperless-ng è uscito" | ||||
|  | ||||
| #: documents/templates/registration/logged_out.html:41 | ||||
| msgid "You have been successfully logged out. Bye!" | ||||
| msgstr "Vi siete disconnessi. Ciao!" | ||||
|  | ||||
| #: documents/templates/registration/logged_out.html:42 | ||||
| msgid "Sign in again" | ||||
| msgstr "Rientra nuovamente" | ||||
|  | ||||
| #: documents/templates/registration/login.html:13 | ||||
| msgid "Paperless-ng sign in" | ||||
| msgstr "Accedi a Paperless-ng" | ||||
|  | ||||
| #: documents/templates/registration/login.html:42 | ||||
| msgid "Please sign in." | ||||
| msgstr "Accedi" | ||||
|  | ||||
| #: documents/templates/registration/login.html:45 | ||||
| msgid "Your username and password didn't match. Please try again." | ||||
| msgstr "Il nome utente e la password non sono corretti. Riprovare." | ||||
|  | ||||
| #: documents/templates/registration/login.html:48 | ||||
| msgid "Username" | ||||
| msgstr "Nome utente" | ||||
|  | ||||
| #: documents/templates/registration/login.html:49 | ||||
| msgid "Password" | ||||
| msgstr "Password" | ||||
|  | ||||
| #: documents/templates/registration/login.html:54 | ||||
| msgid "Sign in" | ||||
| msgstr "Accedi" | ||||
|  | ||||
| #: paperless/settings.py:291 | ||||
| msgid "English (US)" | ||||
| msgstr "Inglese (US)" | ||||
|  | ||||
| #: paperless/settings.py:292 | ||||
| msgid "English (GB)" | ||||
| msgstr "Inglese (GB)" | ||||
|  | ||||
| #: paperless/settings.py:293 | ||||
| msgid "German" | ||||
| msgstr "Tedesco" | ||||
|  | ||||
| #: paperless/settings.py:294 | ||||
| msgid "Dutch" | ||||
| msgstr "Olandese" | ||||
|  | ||||
| #: paperless/settings.py:295 | ||||
| msgid "French" | ||||
| msgstr "Francese" | ||||
|  | ||||
| #: paperless/settings.py:296 | ||||
| msgid "Portuguese (Brazil)" | ||||
| msgstr "Portoghese (Brasile)" | ||||
|  | ||||
| #: paperless/urls.py:118 | ||||
| msgid "Paperless-ng administration" | ||||
| msgstr "Amministrazione di Paperless-ng" | ||||
|  | ||||
| #: paperless_mail/admin.py:25 | ||||
| msgid "Filter" | ||||
| msgstr "Filtro" | ||||
|  | ||||
| #: paperless_mail/admin.py:27 | ||||
| msgid "" | ||||
| "Paperless will only process mails that match ALL of the filters given below." | ||||
| msgstr "" | ||||
| "Paperless-ng processerà solo la posta che rientra in TUTTI i filtri " | ||||
| "impostati." | ||||
|  | ||||
| #: paperless_mail/admin.py:37 | ||||
| msgid "Actions" | ||||
| msgstr "Azioni" | ||||
|  | ||||
| #: paperless_mail/admin.py:39 | ||||
| msgid "" | ||||
| "The action applied to the mail. This action is only performed when documents" | ||||
| " were consumed from the mail. Mails without attachments will remain entirely" | ||||
| " untouched." | ||||
| msgstr "" | ||||
| "L'azione che viene applicata alla email. Questa azione viene eseguita solo " | ||||
| "quando dei documenti vengono elaborati dalla email. Le email senza allegati " | ||||
| "vengono ignorate." | ||||
|  | ||||
| #: paperless_mail/admin.py:46 | ||||
| msgid "Metadata" | ||||
| msgstr "Metadati" | ||||
|  | ||||
| #: paperless_mail/admin.py:48 | ||||
| msgid "" | ||||
| "Assign metadata to documents consumed from this rule automatically. If you " | ||||
| "do not assign tags, types or correspondents here, paperless will still " | ||||
| "process all matching rules that you have defined." | ||||
| msgstr "" | ||||
| "Assegna automaticamente i metadati ai documenti elaborati da questa regola. " | ||||
| "Se non assegni qui dei tag, tipi di documenti o corrispondenti, Paperless " | ||||
| "userà comunque le regole corrispondenti che hai configurato." | ||||
|  | ||||
| #: paperless_mail/apps.py:9 | ||||
| msgid "Paperless mail" | ||||
| msgstr "Email Paperless" | ||||
|  | ||||
| #: paperless_mail/models.py:11 | ||||
| msgid "mail account" | ||||
| msgstr "account email" | ||||
|  | ||||
| #: paperless_mail/models.py:12 | ||||
| msgid "mail accounts" | ||||
| msgstr "account email" | ||||
|  | ||||
| #: paperless_mail/models.py:19 | ||||
| msgid "No encryption" | ||||
| msgstr "Nessuna crittografia" | ||||
|  | ||||
| #: paperless_mail/models.py:20 | ||||
| msgid "Use SSL" | ||||
| msgstr "Usa SSL" | ||||
|  | ||||
| #: paperless_mail/models.py:21 | ||||
| msgid "Use STARTTLS" | ||||
| msgstr "Usa STARTTLS" | ||||
|  | ||||
| #: paperless_mail/models.py:29 | ||||
| msgid "IMAP server" | ||||
| msgstr "Server IMAP" | ||||
|  | ||||
| #: paperless_mail/models.py:33 | ||||
| msgid "IMAP port" | ||||
| msgstr "Porta IMAP" | ||||
|  | ||||
| #: paperless_mail/models.py:36 | ||||
| msgid "" | ||||
| "This is usually 143 for unencrypted and STARTTLS connections, and 993 for " | ||||
| "SSL connections." | ||||
| msgstr "" | ||||
| "Di solito si usa 143 per STARTTLS o nessuna crittografia e 993 per SSL." | ||||
|  | ||||
| #: paperless_mail/models.py:40 | ||||
| msgid "IMAP security" | ||||
| msgstr "Sicurezza IMAP" | ||||
|  | ||||
| #: paperless_mail/models.py:46 | ||||
| msgid "username" | ||||
| msgstr "nome utente" | ||||
|  | ||||
| #: paperless_mail/models.py:50 | ||||
| msgid "password" | ||||
| msgstr "password" | ||||
|  | ||||
| #: paperless_mail/models.py:60 | ||||
| msgid "mail rule" | ||||
| msgstr "regola email" | ||||
|  | ||||
| #: paperless_mail/models.py:61 | ||||
| msgid "mail rules" | ||||
| msgstr "regole email" | ||||
|  | ||||
| #: paperless_mail/models.py:67 | ||||
| msgid "Only process attachments." | ||||
| msgstr "Elabora solo gli allegati." | ||||
|  | ||||
| #: paperless_mail/models.py:68 | ||||
| msgid "Process all files, including 'inline' attachments." | ||||
| msgstr "Elabora tutti i file, inclusi gli allegati nel corpo." | ||||
|  | ||||
| #: paperless_mail/models.py:78 | ||||
| msgid "Mark as read, don't process read mails" | ||||
| msgstr "Segna come letto, non elaborare le email lette" | ||||
|  | ||||
| #: paperless_mail/models.py:79 | ||||
| msgid "Flag the mail, don't process flagged mails" | ||||
| msgstr "Contrassegna la email, non elaborare le email elaborate." | ||||
|  | ||||
| #: paperless_mail/models.py:80 | ||||
| msgid "Move to specified folder" | ||||
| msgstr "Sposta in una cartella" | ||||
|  | ||||
| #: paperless_mail/models.py:81 | ||||
| msgid "Delete" | ||||
| msgstr "Elimina" | ||||
|  | ||||
| #: paperless_mail/models.py:88 | ||||
| msgid "Use subject as title" | ||||
| msgstr "Usa oggetto come titolo" | ||||
|  | ||||
| #: paperless_mail/models.py:89 | ||||
| msgid "Use attachment filename as title" | ||||
| msgstr "Usa il nome dell'allegato come titolo" | ||||
|  | ||||
| #: paperless_mail/models.py:99 | ||||
| msgid "Do not assign a correspondent" | ||||
| msgstr "Non assegnare un corrispondente" | ||||
|  | ||||
| #: paperless_mail/models.py:101 | ||||
| msgid "Use mail address" | ||||
| msgstr "Usa indirizzo email" | ||||
|  | ||||
| #: paperless_mail/models.py:103 | ||||
| msgid "Use name (or mail address if not available)" | ||||
| msgstr "Usa nome (o indirizzo email se non disponibile)" | ||||
|  | ||||
| #: paperless_mail/models.py:105 | ||||
| msgid "Use correspondent selected below" | ||||
| msgstr "Usa il corrispondente selezionato qui sotto" | ||||
|  | ||||
| #: paperless_mail/models.py:113 | ||||
| msgid "order" | ||||
| msgstr "priorità" | ||||
|  | ||||
| #: paperless_mail/models.py:120 | ||||
| msgid "account" | ||||
| msgstr "account" | ||||
|  | ||||
| #: paperless_mail/models.py:124 | ||||
| msgid "folder" | ||||
| msgstr "cartella" | ||||
|  | ||||
| #: paperless_mail/models.py:128 | ||||
| msgid "filter from" | ||||
| msgstr "filtra da" | ||||
|  | ||||
| #: paperless_mail/models.py:131 | ||||
| msgid "filter subject" | ||||
| msgstr "filtra oggetto" | ||||
|  | ||||
| #: paperless_mail/models.py:134 | ||||
| msgid "filter body" | ||||
| msgstr "filtra corpo" | ||||
|  | ||||
| #: paperless_mail/models.py:138 | ||||
| msgid "filter attachment filename" | ||||
| msgstr "filtra nome allegato" | ||||
|  | ||||
| #: paperless_mail/models.py:140 | ||||
| msgid "" | ||||
| "Only consume documents which entirely match this filename if specified. " | ||||
| "Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." | ||||
| msgstr "" | ||||
| "Elabora i documenti che corrispondono a questo nome. Puoi usare wildcard " | ||||
| "come *.pdf o *fattura*. Non fa differenza fra maiuscole e minuscole." | ||||
|  | ||||
| #: paperless_mail/models.py:146 | ||||
| msgid "maximum age" | ||||
| msgstr "età massima" | ||||
|  | ||||
| #: paperless_mail/models.py:148 | ||||
| msgid "Specified in days." | ||||
| msgstr "Definito in giorni." | ||||
|  | ||||
| #: paperless_mail/models.py:151 | ||||
| msgid "attachment type" | ||||
| msgstr "tipo di allegato" | ||||
|  | ||||
| #: paperless_mail/models.py:154 | ||||
| msgid "" | ||||
| "Inline attachments include embedded images, so it's best to combine this " | ||||
| "option with a filename filter." | ||||
| msgstr "" | ||||
| "Gli allegati in linea includono le immagini nel corpo, quindi è meglio " | ||||
| "combinare questa opzione con il filtro nome." | ||||
|  | ||||
| #: paperless_mail/models.py:159 | ||||
| msgid "action" | ||||
| msgstr "azione" | ||||
|  | ||||
| #: paperless_mail/models.py:165 | ||||
| msgid "action parameter" | ||||
| msgstr "parametro azione" | ||||
|  | ||||
| #: paperless_mail/models.py:167 | ||||
| msgid "" | ||||
| "Additional parameter for the action selected above, i.e., the target folder " | ||||
| "of the move to folder action." | ||||
| msgstr "" | ||||
| "Parametro aggiuntivo per l'azione selezionata, ad esempio la cartella di " | ||||
| "destinazione per l'azione che sposta in una cartella." | ||||
|  | ||||
| #: paperless_mail/models.py:173 | ||||
| msgid "assign title from" | ||||
| msgstr "assegna tittolo da" | ||||
|  | ||||
| #: paperless_mail/models.py:183 | ||||
| msgid "assign this tag" | ||||
| msgstr "assegna questo tag" | ||||
|  | ||||
| #: paperless_mail/models.py:191 | ||||
| msgid "assign this document type" | ||||
| msgstr "assegna questo tipo di documento" | ||||
|  | ||||
| #: paperless_mail/models.py:195 | ||||
| msgid "assign correspondent from" | ||||
| msgstr "assegna corrispondente da" | ||||
|  | ||||
| #: paperless_mail/models.py:205 | ||||
| msgid "assign this correspondent" | ||||
| msgstr "assegna questo corrispondente" | ||||
| @@ -13,6 +13,8 @@ class ApiVersionMiddleware: | ||||
|         if request.user.is_authenticated: | ||||
|             versions = settings.REST_FRAMEWORK['ALLOWED_VERSIONS'] | ||||
|             response['X-Api-Version'] = versions[len(versions)-1] | ||||
|             response['X-Version'] = ".".join([str(_) for _ in version.__version__]) | ||||
|             response['X-Version'] = ".".join( | ||||
|                 [str(_) for _ in version.__version__] | ||||
|             ) | ||||
|  | ||||
|         return response | ||||
|   | ||||
| @@ -299,7 +299,8 @@ LANGUAGES = [ | ||||
|     ("de", _("German")), | ||||
|     ("nl-nl", _("Dutch")), | ||||
|     ("fr", _("French")), | ||||
|     ("pt-br", _("Portuguese (Brazil)")) | ||||
|     ("pt-br", _("Portuguese (Brazil)")), | ||||
|     ("it", _("Italian")) | ||||
| ] | ||||
|  | ||||
| LOCALE_PATHS = [ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jonaswinkler
					jonaswinkler