diff --git a/filer/__init__.py b/filer/__init__.py
index f705a2ba8..bde226217 100644
--- a/filer/__init__.py
+++ b/filer/__init__.py
@@ -1,3 +1,14 @@
-#-*- coding: utf-8 -*-
-# version string following pep-0440
-__version__ = '0.9.123' # pragma: nocover
+"""
+See PEP 386 (https://www.python.org/dev/peps/pep-0386/)
+
+Release logic:
+ 1. Increase version number (change __version__ below).
+ 2. Check that all changes have been documented in CHANGELOG.rst.
+ 3. git add filer/__init__.py CHANGELOG.rst
+ 4. git commit -m 'Bump to {new version}'
+ 5. git push
+ 6. Assure that all tests pass on CI
+ 7. Create a new release on github.
+"""
+
+__version__ = '3.5.0.pbs.1'
diff --git a/filer/admin/__init__.py b/filer/admin/__init__.py
index a55a36e4e..c84fb51b9 100644
--- a/filer/admin/__init__.py
+++ b/filer/admin/__init__.py
@@ -1,18 +1,43 @@
-#-*- coding: utf-8 -*-
from django.contrib import admin
-from filer.admin.clipboardadmin import ClipboardAdmin
-from filer.admin.fileadmin import FileAdmin
-from filer.admin.folderadmin import FolderAdmin
-from filer.admin.imageadmin import ImageAdmin
-from filer.admin.archiveadmin import ArchiveAdmin
-from filer.models import (Folder, File, Clipboard, Image,
- Archive)
-from filer.admin.trashadmin import Trash, TrashAdmin
+from ..models import Clipboard, File, Folder, FolderPermission
+from ..settings import FILER_IMAGE_MODEL
+from ..utils.loader import load_model
+from .clipboardadmin import ClipboardAdmin
+from .fileadmin import FileAdmin
+from .folderadmin import FolderAdmin
+from .imageadmin import ImageAdmin
+from .permissionadmin import PermissionAdmin
+
+# PBS-specific: ThumbnailOption model may not exist in PBS migrations yet
+try:
+ from ..models import ThumbnailOption
+ from .thumbnailoptionadmin import ThumbnailOptionAdmin
+ _has_thumbnail_option = True
+except ImportError:
+ _has_thumbnail_option = False
+
+# PBS-specific: Trash admin
+from ..admin.trashadmin import Trash, TrashAdmin
+
+Image = load_model(FILER_IMAGE_MODEL)
admin.site.register(Folder, FolderAdmin)
admin.site.register(File, FileAdmin)
admin.site.register(Clipboard, ClipboardAdmin)
admin.site.register(Image, ImageAdmin)
-admin.site.register(Archive, ArchiveAdmin)
+admin.site.register(FolderPermission, PermissionAdmin)
+
+if _has_thumbnail_option:
+ admin.site.register(ThumbnailOption, ThumbnailOptionAdmin)
+
+# PBS-specific: register Trash admin
admin.site.register([Trash], TrashAdmin)
+
+# PBS-specific: Archive (backward compat)
+try:
+ from ..models import Archive
+ from ..admin.archiveadmin import ArchiveAdmin
+ admin.site.register(Archive, ArchiveAdmin)
+except ImportError:
+ pass
diff --git a/filer/admin/clipboardadmin.py b/filer/admin/clipboardadmin.py
index 8302b3b50..71d95daa7 100644
--- a/filer/admin/clipboardadmin.py
+++ b/filer/admin/clipboardadmin.py
@@ -1,27 +1,29 @@
-#-*- coding: utf-8 -*-
+from django.contrib import admin, messages
+from django.core.exceptions import ValidationError
from django.forms.models import modelform_factory
-from django.core.exceptions import PermissionDenied
-from django.contrib import admin
-from django.http import HttpResponse, HttpResponseRedirect
+from django.http import JsonResponse
+from django.urls import path, reverse
+from django.utils.translation import gettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
-from django.urls import re_path
-from filer import settings as filer_settings
-from filer.models import Clipboard, ClipboardItem, Folder, tools
-from filer.utils.files import (
- handle_upload, UploadException, matching_file_subtypes, truncate_filename
-)
-from filer.views import (
- popup_param, selectfolder_param, current_site_param,
- file_type_param
+
+from .. import settings as filer_settings
+from ..models import Clipboard, ClipboardItem, Folder
+from ..settings import FILER_THUMBNAIL_ICON_SIZE
+from ..utils.files import handle_request_files_upload, handle_upload
+from ..utils.loader import load_model
+from ..validation import validate_upload
+from . import views
+
+
+NO_PERMISSIONS = _("You do not have permission to upload files.")
+NO_FOLDER_ERROR = _("Can't find folder to upload. Please refresh and try again")
+NO_PERMISSIONS_FOR_FOLDER = _(
+ "Can't use this folder, Permission Denied. Please select another folder."
)
-from filer.admin.tools import is_valid_destination
-from filer.utils.is_ajax import is_ajax
-import json
-# even though the CharField is limited at 255 characters, the filename is used in
-# thumbnail creation, which remembers the path and also post-fixes the name with
-# '__32x32_q85_crop_subsampling-2_upscale.jpg'-like strings
-FILENAME_LIMIT = 100 # larger values cause DataError
+
+Image = load_model(filer_settings.FILER_IMAGE_MODEL)
+
# ModelAdmins
class ClipboardItemInline(admin.TabularInline):
@@ -31,149 +33,30 @@ class ClipboardItemInline(admin.TabularInline):
class ClipboardAdmin(admin.ModelAdmin):
model = Clipboard
inlines = [ClipboardItemInline]
- # filter_horizontal = ('files',)
raw_id_fields = ('user',)
verbose_name = "DEBUG Clipboard"
verbose_name_plural = "DEBUG Clipboards"
- messages = {
- 'already-exists': 'A file named {} already exists in the clipboard',
- 'request-invalid': "AJAX request not valid: form invalid '{}'"
- }
def get_urls(self):
- urls = super(ClipboardAdmin, self).get_urls()
- url_patterns = [
- re_path(r'^operations/paste_clipboard_to_folder/$',
- self.admin_site.admin_view(self.paste_clipboard_to_folder),
- name='filer-paste_clipboard_to_folder'),
- re_path(r'^operations/discard_clipboard/$',
- self.admin_site.admin_view(self.discard_clipboard),
- name='filer-discard_clipboard'),
- re_path(r'^operations/delete_clipboard/$',
- self.admin_site.admin_view(self.delete_clipboard),
- name='filer-delete_clipboard'),
- # upload does it's own permission stuff (because of the stupid
- # flash missing cookie stuff)
- re_path(r'^operations/upload/$',
- self.ajax_upload,
- name='filer-ajax_upload'),
- ]
- url_patterns.extend(urls)
- return url_patterns
-
- def get_clipboard(self, request):
- return Clipboard.objects.get(id=request.POST.get('clipboard_id'))
-
- def make_clipboard_redirect(self, request):
- return HttpResponseRedirect('%s%s%s%s%s' % (
- request.POST.get('redirect_to', ''),
- popup_param(request),
- selectfolder_param(request),
- current_site_param(request),
- file_type_param(request)))
-
- def paste_clipboard_to_folder(self, request):
- if request.method == 'POST':
- folder_id = request.POST.get('folder_id')
- if not folder_id:
- raise PermissionDenied
- folder = Folder.objects.get(id=folder_id)
- if not is_valid_destination(request, folder):
- raise PermissionDenied
-
- clipboard = self.get_clipboard(request)
- files_moved = tools.move_files_from_clipboard_to_folder(
- request, clipboard, folder)
- tools.discard_clipboard_files(clipboard, files_moved)
- return self.make_clipboard_redirect(request)
-
- def discard_clipboard(self, request):
- if request.method == 'POST':
- clipboard = self.get_clipboard(request)
- tools.discard_clipboard(clipboard)
- return self.make_clipboard_redirect(request)
-
- def delete_clipboard(self, request):
- if request.method == 'POST':
- tools.delete_clipboard(self.get_clipboard(request))
- return self.make_clipboard_redirect(request)
-
- def clone_files_from_clipboard_to_folder(self, request):
- if request.method == 'POST':
- folder_id = request.POST.get('folder_id')
- if not folder_id:
- raise PermissionDenied
- folder = Folder.objects.get(id=folder_id)
- if not is_valid_destination(request, folder):
- raise PermissionDenied
- tools.clone_files_from_clipboard_to_folder(
- self.get_clipboard(request), folder)
- return self.make_clipboard_redirect(request)
-
- @csrf_exempt
- def ajax_upload(self, request, folder_id=None):
- """
- receives an upload from the uploader. Receives only one file at the time.
- """
- mimetype = "application/json" if is_ajax(request) else "text/html"
- upload, file_obj, clipboard_item = None, None, None
- try:
- upload, original_filename, _ = handle_upload(request)
- filename = truncate_filename(upload, maxlen=FILENAME_LIMIT)
- upload.name = filename # the upload raw has also the title saved in a CharField
-
- # Get clipboad
- clipboard = Clipboard.objects.get_or_create(user=request.user)[0]
- if any(f for f in clipboard.files.all() if f.original_filename == filename):
- raise UploadException(self.messages['already-exists'].format(filename))
- matched_file_types = matching_file_subtypes(filename, upload, request)
- FileForm = modelform_factory(
- model=matched_file_types[0],
- fields=('original_filename', 'owner', 'file')
- )
- uploadform = FileForm({'original_filename': filename,
- 'owner': request.user.pk},
- {'file': upload})
- if uploadform.is_valid():
- file_obj = uploadform.save(commit=False)
- # Enforce the FILER_IS_PUBLIC_DEFAULT
- file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
- file_obj.save()
- clipboard_item = ClipboardItem(
- clipboard=clipboard, file=file_obj)
- clipboard_item.save()
- json_response = {
- 'thumbnail': file_obj.icons['32'],
- 'alt_text': '',
- 'label': str(file_obj),
- }
- return HttpResponse(json.dumps(json_response),
- content_type=mimetype)
- else:
- form_errors = '; '.join(['%s: %s' % (
- field,
- ', '.join(errors)) for field, errors in list(uploadform.errors.items())
- ])
- raise UploadException(self.messages['request-invalid'].format(form_errors))
- except UploadException as exception:
- return HttpResponse(json.dumps({'error': str(exception)}),
- content_type=mimetype)
- except Exception as error: # no matter the error, we don't return a 500 code
- # an error occurred trying to build the file obj and the clipboard item
- # since they are interconnected, we'll delete both to cleanup
- if clipboard_item:
- clipboard_item.file.file.close()
- clipboard_item.file.file.delete()
- clipboard_item.delete()
- return HttpResponse(json.dumps({'error': str(error)}),
- content_type=mimetype)
- finally:
- if upload:
- upload.close()
- if file_obj and file_obj.file:
- file_obj.file.close()
-
- def get_model_perms(self, request):
+ return [
+ path('operations/paste_clipboard_to_folder/',
+ self.admin_site.admin_view(views.paste_clipboard_to_folder),
+ name='filer-paste_clipboard_to_folder'),
+ path('operations/discard_clipboard/',
+ self.admin_site.admin_view(views.discard_clipboard),
+ name='filer-discard_clipboard'),
+ path('operations/delete_clipboard/',
+ self.admin_site.admin_view(views.delete_clipboard),
+ name='filer-delete_clipboard'),
+ path('operations/upload//',
+ ajax_upload,
+ name='filer-ajax_upload'),
+ path('operations/upload/no_folder/',
+ ajax_upload,
+ name='filer-ajax_upload'),
+ ] + super().get_urls()
+
+ def get_model_perms(self, *args, **kwargs):
"""
It seems this is only used for the list view. NICE :-)
"""
@@ -182,3 +65,98 @@ def get_model_perms(self, request):
'change': False,
'delete': False,
}
+
+
+@csrf_exempt
+def ajax_upload(request, folder_id=None):
+ """
+ Receives an upload from the uploader. Receives only one file at a time.
+ """
+
+ if not request.user.has_perm("filer.add_file"):
+ messages.error(request, NO_PERMISSIONS)
+ return JsonResponse({'error': NO_PERMISSIONS})
+
+ if folder_id:
+ try:
+ # Get folder
+ folder = Folder.objects.get(pk=folder_id)
+ except Folder.DoesNotExist:
+ messages.error(request, NO_FOLDER_ERROR)
+ return JsonResponse({'error': NO_FOLDER_ERROR})
+ else:
+ folder = Folder.objects.filter(pk=request.session.get('filer_last_folder_id', 0)).first()
+
+ # check permissions
+ if folder and not folder.has_add_children_permission(request):
+ messages.error(request, NO_PERMISSIONS_FOR_FOLDER)
+ return JsonResponse({'error': NO_PERMISSIONS_FOR_FOLDER})
+
+ if len(request.FILES) == 1:
+ # don't check if request is ajax or not, just grab the file
+ upload, filename, is_raw, mime_type = handle_request_files_upload(request)
+ else:
+ # else process the request as usual
+ upload, filename, is_raw, mime_type = handle_upload(request)
+ # TODO: Deprecated/refactor
+ # Get clipboad
+ # clipboard = Clipboard.objects.get_or_create(user=request.user)[0]
+
+ # find the file type
+ for filer_class in filer_settings.FILER_FILE_MODELS:
+ FileSubClass = load_model(filer_class)
+ # TODO: What if there are more than one that qualify?
+ if FileSubClass.matches_file_type(filename, upload, mime_type):
+ FileForm = modelform_factory(
+ model=FileSubClass,
+ fields=('original_filename', 'owner', 'file')
+ )
+ break
+ uploadform = FileForm({'original_filename': filename, 'owner': request.user.pk},
+ {'file': upload})
+ uploadform.request = request
+ uploadform.instance.mime_type = mime_type
+ if uploadform.is_valid():
+ try:
+ validate_upload(filename, upload, request.user, mime_type)
+ file_obj = uploadform.save(commit=False)
+ # Enforce the FILER_IS_PUBLIC_DEFAULT
+ file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
+ except ValidationError as error:
+ messages.error(request, str(error))
+ return JsonResponse({'error': str(error)})
+ file_obj.folder = folder
+ file_obj.save()
+ # TODO: Deprecated/refactor
+ # clipboard_item = ClipboardItem(
+ # clipboard=clipboard, file=file_obj)
+ # clipboard_item.save()
+
+ try:
+ thumbnail = None
+ data = {
+ 'thumbnail': thumbnail,
+ 'alt_text': '',
+ 'label': str(file_obj),
+ 'file_id': file_obj.pk,
+ }
+ # prepare preview thumbnail
+ if isinstance(file_obj, Image):
+ data['thumbnail_180'] = reverse(
+ f"admin:filer_{file_obj._meta.model_name}_fileicon",
+ args=(file_obj.pk, FILER_THUMBNAIL_ICON_SIZE),
+ )
+ data['original_image'] = file_obj.url
+ return JsonResponse(data)
+ except Exception as error:
+ messages.error(request, str(error))
+ return JsonResponse({"error": str(error)})
+ else:
+ for key, error_list in uploadform.errors.items():
+ for error in error_list:
+ messages.error(request, error)
+
+ form_errors = '; '.join(['{}'.format(
+ ', '.join(errors)) for errors in list(uploadform.errors.values())
+ ])
+ return JsonResponse({'error': str(form_errors)}, status=200)
diff --git a/filer/admin/common_admin.py b/filer/admin/common_admin.py
index c6ee96971..4e34716cc 100644
--- a/filer/admin/common_admin.py
+++ b/filer/admin/common_admin.py
@@ -7,8 +7,8 @@
from django.http import HttpResponseRedirect
from filer.models import Folder, File
-from filer.admin.tools import (has_admin_role, has_role_on_site,
- has_multi_file_action_permission)
+from filer.utils.cms_roles import has_admin_role, has_role_on_site
+from filer.admin.tools import has_multi_file_action_permission
from filer.views import (popup_param, selectfolder_param, popup_status,
selectfolder_status, current_site_param,
get_param_from_request)
diff --git a/filer/admin/fileadmin.py b/filer/admin/fileadmin.py
index 2dbadb63d..0747cd61c 100644
--- a/filer/admin/fileadmin.py
+++ b/filer/admin/fileadmin.py
@@ -1,80 +1,254 @@
-#-*- coding: utf-8 -*-
+import mimetypes
+
+from django import forms
+from django.contrib.admin.templatetags.admin_urls import admin_urlname
+from django.contrib.admin.utils import unquote
+from django.contrib.staticfiles.storage import staticfiles_storage
from django.db import models
-from django.utils.translation import gettext as _
-from filer.admin.common_admin import FilePermissionModelAdmin
-from filer.fields.file import NonClearableFileInput
+from django.http import Http404, HttpResponse, HttpResponseRedirect
+from django.shortcuts import get_object_or_404
+from django.urls import path, reverse
+from django.utils.safestring import mark_safe
+from django.utils.timezone import now
+from django.utils.translation import gettext as _
+
+from easy_thumbnails.engine import NoSourceGenerator
+from easy_thumbnails.exceptions import InvalidImageFormatError
+from easy_thumbnails.files import get_thumbnailer
+from easy_thumbnails.models import Thumbnail as EasyThumbnail
+from easy_thumbnails.options import ThumbnailOptions
+
+from .. import settings
+from ..models import File
+from ..settings import DEFERRED_THUMBNAIL_SIZES
+from ..utils.loader import load_model
+from .permissions import PrimitivePermissionAwareModelAdmin
+from .tools import AdminContext, admin_url_params_encoded, popup_status
+
+# PBS-specific imports
+from .common_admin import FilePermissionModelAdmin
+from ..fields.file import NonClearableFileInput
+
+try:
+ from ..models import BaseImage
+except ImportError:
+ BaseImage = None
+
+Image = load_model(settings.FILER_IMAGE_MODEL)
+
+class FileAdminChangeFrom(forms.ModelForm):
+ class Meta:
+ model = File
+ exclude = ()
-class FileAdmin(FilePermissionModelAdmin):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ if "file" in self.fields:
+ self.fields["file"].widget = forms.FileInput()
+
+ def clean(self):
+ from ..validation import validate_upload
+ cleaned_data = super().clean()
+ if "file" in self.changed_data and cleaned_data["file"]:
+ mime_type = mimetypes.guess_type(cleaned_data["file"].name)[0] or 'application/octet-stream'
+ file = cleaned_data["file"]
+ file.open("w+") # Allow for sanitizing upload
+ file.seek(0)
+ validate_upload(
+ file_name=cleaned_data["file"].name,
+ file=file.file,
+ owner=cleaned_data.get("owner"),
+ mime_type=mime_type,
+ )
+ file.open("r")
+ return self.cleaned_data
+
+
+class FileAdmin(PrimitivePermissionAwareModelAdmin):
list_display = ('label',)
list_per_page = 10
search_fields = ['name', 'original_filename', 'sha1', 'description']
- raw_id_fields = ('owner',)
- readonly_fields = ('sha1', )
+ readonly_fields = ('sha1', 'display_canonical')
+
+ form = FileAdminChangeFrom
formfield_overrides = {
- models.FileField: {'widget': NonClearableFileInput},
+ models.FileField: {'widget': NonClearableFileInput},
}
+ # PBS-specific: make fields readonly for restricted/core files
def get_readonly_fields(self, request, obj=None):
if obj and (obj.is_readonly_for_user(request.user) or
obj.is_restricted_for_user(request.user)):
- return [field.name
- for field in obj.__class__._meta.fields]
- self.readonly_fields = [ro_field
- for ro_field in self.readonly_fields]
+ return [field.name for field in obj.__class__._meta.fields]
+ readonly = list(self.readonly_fields)
self._make_restricted_field_readonly(request.user, obj)
if not request.user.is_superuser:
- # allow owner to be editable only by superusers
- self.readonly_fields += ['owner']
- return super(FileAdmin, self).get_readonly_fields(
- request, obj)
+ if 'owner' not in readonly:
+ readonly.append('owner')
+ return readonly
+
+ def _make_restricted_field_readonly(self, user, obj):
+ """PBS: make restricted field readonly if user can't change restriction."""
+ if obj and hasattr(obj, 'can_change_restricted'):
+ if not obj.can_change_restricted(user):
+ if 'restricted' not in self.readonly_fields:
+ self.readonly_fields = list(self.readonly_fields) + ['restricted']
@classmethod
- def build_fieldsets(cls, extra_main_fields=(), extra_advanced_fields=(), extra_fieldsets=()):
+ def build_fieldsets(cls, extra_main_fields=(), extra_advanced_fields=(),
+ extra_fieldsets=()):
fieldsets = (
(None, {
- 'fields': ('title', 'owner', 'description',) + extra_main_fields,
+ 'fields': (
+ 'title',
+ 'owner',
+ 'description',
+ ) + extra_main_fields,
}),
(_('Advanced'), {
- # due to custom requirements: sha1 field should be hidden
- # 'fields': ('file', 'sha1',) + extra_advanced_fields,
- 'fields': ('file', 'name',) + extra_advanced_fields,
+ 'fields': (
+ 'file',
+ 'name',
+ 'sha1',
+ 'display_canonical',
+ ) + extra_advanced_fields,
'classes': ('collapse',),
- }),
- (('Permissions'), {
+ }),
+ (_('Permissions'), {
'fields': ('restricted',),
'classes': ('collapse', 'wide', 'extrapretty'),
- })
- ) + extra_fieldsets
+ }),
+ ) + extra_fieldsets
+ if settings.FILER_ENABLE_PERMISSIONS:
+ fieldsets = fieldsets + (
+ (None, {
+ 'fields': ('is_public',)
+ }),
+ )
return fieldsets
+ def response_change(self, request, obj):
+ if (
+ request.POST
+ and '_continue' not in request.POST
+ and '_saveasnew' not in request.POST
+ and '_addanother' not in request.POST
+ and '_edit_from_widget' not in request.POST
+ ):
+ if obj.folder:
+ url = reverse('admin:filer-directory_listing',
+ kwargs={'folder_id': obj.folder.id})
+ else:
+ url = reverse(
+ 'admin:filer-directory_listing-unfiled_images')
+ url = "{}{}".format(
+ url,
+ admin_url_params_encoded(request),
+ )
+ return HttpResponseRedirect(url)
+
+ template_response = super().response_change(request, obj)
+ if hasattr(template_response, 'context_data'):
+ template_response.context_data["media"] = self.media
+ return template_response
+
+ def render_change_form(self, request, context, add=False, change=False,
+ form_url='', obj=None):
+ context.update({
+ 'show_delete': True,
+ 'history_url': admin_urlname(self.opts, 'history'),
+ 'expand_image_url': None,
+ 'is_popup': popup_status(request),
+ 'filer_admin_context': AdminContext(request),
+ })
+ if obj and obj.mime_maintype == 'image' and obj.file.exists():
+ if 'svg' in obj.mime_type:
+ context['expand_image_url'] = reverse(admin_urlname(Image._meta, 'expand'), args=(obj.pk,))
+ else:
+ context['expand_image_url'] = obj.file.url
+ return super().render_change_form(
+ request=request, context=context, add=add, change=change,
+ form_url=form_url, obj=obj)
+
+ def delete_view(self, request, object_id, extra_context=None):
+ try:
+ obj = self.get_queryset(request).get(pk=unquote(object_id))
+ parent_folder = obj.folder
+ except self.model.DoesNotExist:
+ parent_folder = None
+
+ if request.POST:
+ super().delete_view(
+ request=request, object_id=object_id,
+ extra_context=extra_context)
+ if parent_folder:
+ url = reverse('admin:filer-directory_listing',
+ kwargs={'folder_id': parent_folder.id})
+ else:
+ url = reverse('admin:filer-directory_listing-unfiled_images')
+ url = "{}{}".format(
+ url,
+ admin_url_params_encoded(request)
+ )
+ return HttpResponseRedirect(url)
+
+ return super().delete_view(
+ request=request, object_id=object_id,
+ extra_context=extra_context)
+
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
if not obj:
- # We do this in order to prevent access to the change_list view
return False
- return super(FileAdmin, self).has_change_permission(request, obj)
+ return super().has_change_permission(request, obj)
def has_view_permission(self, request, obj=None):
if not obj:
- # Block access to the changelist view (Django 4.2+ uses
- # has_view_permission separately from has_change_permission)
return False
- return super(FileAdmin, self).has_view_permission(request, obj)
+ return super().has_view_permission(request, obj)
def get_model_perms(self, request):
- """
- While this method is used by Django, it is no longer used to determine if the
- option is available in the changelist view, which was the original intention.
- The has_xxx_permission is used instead.
- """
return {
- 'add': self.has_add_permission(request),
- 'change': self.has_change_permission(request),
+ 'add': False,
+ 'change': False,
'delete': False,
}
+ def display_canonical(self, instance):
+ canonical = instance.canonical_url
+ if canonical:
+ return mark_safe(f'{canonical} ')
+ else:
+ return '-'
+ display_canonical.allow_tags = True
+ display_canonical.short_description = _('canonical URL')
+
+ def get_urls(self):
+ return super().get_urls() + [
+ path("icon//",
+ self.admin_site.admin_view(self.icon_view),
+ name=f"filer_{self.model._meta.model_name}_fileicon")
+ ]
+
+ def icon_view(self, request, file_id: int, size: int) -> HttpResponse:
+ if size not in DEFERRED_THUMBNAIL_SIZES:
+ raise Http404
+ file = get_object_or_404(File, pk=file_id)
+ if BaseImage and not isinstance(file, BaseImage):
+ raise Http404()
+
+ try:
+ thumbnailer = get_thumbnailer(file)
+ thumbnail_options = ThumbnailOptions({'size': (size, size), "crop": True})
+ thumbnail = thumbnailer.get_thumbnail(thumbnail_options, generate=True)
+ EasyThumbnail.objects.filter(name=thumbnail.name).update(modified=now())
+ return HttpResponseRedirect(thumbnail.url)
+ except (InvalidImageFormatError, NoSourceGenerator):
+ return HttpResponseRedirect(staticfiles_storage.url('filer/icons/file-missing.svg'))
+
+
FileAdmin.fieldsets = FileAdmin.build_fieldsets()
diff --git a/filer/admin/folderadmin.py b/filer/admin/folderadmin.py
index 92c14b8b5..9398ac0a0 100644
--- a/filer/admin/folderadmin.py
+++ b/filer/admin/folderadmin.py
@@ -1,300 +1,293 @@
-# -*- coding: utf-8 -*-
-import json
+import itertools
import os
import re
-from functools import partial
+from collections import OrderedDict
+from urllib.parse import quote as urlquote
+from urllib.parse import unquote as urlunquote
-from django.conf import settings
-from django.contrib.admin import helpers
-from django.contrib.admin.utils import quote, unquote, capfirst
+from django import VERSION as DJANGO_VERSION
+from django import forms
+from django.conf import settings as django_settings
from django.contrib import messages
-from filer.admin.patched.admin_utils import get_deleted_objects
-from django.core.exceptions import PermissionDenied
-from django.core.paginator import Paginator, InvalidPage, EmptyPage
-from django.urls import reverse, re_path
-from django.db import router
-from django.db.models import Q
-from django.contrib.sites.models import Site
-from django.contrib.contenttypes.models import ContentType
-from django.contrib.auth import get_permission_codename
-from django.http import HttpResponseRedirect, Http404, HttpResponse
-from django.shortcuts import render
+from django.contrib.admin import helpers
+from django.contrib.admin.utils import capfirst, quote, unquote
+from django.core.exceptions import PermissionDenied, ValidationError
+from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
+from django.db import models, router
+from django.db.models import Case, F, OuterRef, Subquery, When
+from django.db.models.functions import Coalesce, Lower
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import get_object_or_404
+from django.template.response import TemplateResponse
+from django.urls import path, reverse
from django.utils.encoding import force_str
-from django.utils.html import escape
+from django.utils.html import escape, format_html
from django.utils.safestring import mark_safe
-from django.utils.translation import gettext as _
-from django.utils.translation import gettext_lazy
-from filer.admin.forms import CopyFilesAndFoldersForm
-from filer.admin.common_admin import FolderPermissionModelAdmin
-from filer.views import (popup_status, popup_param, selectfolder_status,
- selectfolder_param, current_site_param,
- get_param_from_request)
-from filer.admin.tools import (folders_available, files_available,
- get_admin_sites_for_user,
- has_multi_file_action_permission,
- is_valid_destination,)
-from filer.models import (Folder, FolderRoot, UnfiledImages, File, tools,
- ImagesWithMissingData,
- Archive, Image)
-from filer.settings import FILER_STATICMEDIA_PREFIX, FILER_PAGINATE_BY
-from filer.utils.multi_model_qs import MultiMoldelQuerysetChain
-from filer.utils.is_ajax import is_ajax
+from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
+from easy_thumbnails.models import Thumbnail
+
+from .. import settings
+from ..cache import clear_folder_permission_cache
+from ..models import File, Folder, FolderPermission, FolderRoot, ImagesWithMissingData, UnsortedImages, tools
+from ..settings import (
+ FILER_IMAGE_MODEL, FILER_PAGINATE_BY, FILER_TABLE_ICON_SIZE, FILER_THUMBNAIL_ICON_SIZE, TABLE_LIST_TYPE,
+)
+from ..thumbnail_processors import normalize_subject_location
+from ..utils.compatibility import get_delete_permission
+from ..utils.filer_easy_thumbnails import FilerActionThumbnailer
+from ..utils.loader import load_model
+from . import views
+from .forms import CopyFilesAndFoldersForm, RenameFilesForm, ResizeImagesForm
+from .patched.admin_utils import get_deleted_objects
+from .permissions import PrimitivePermissionAwareModelAdmin
+from .tools import (
+ AdminContext, admin_url_params_encoded, check_files_edit_permissions, check_files_read_permissions,
+ check_folder_edit_permissions, check_folder_read_permissions, get_directory_listing_type, popup_status,
+ userperms_for_request,
+)
+
+
+Image = load_model(FILER_IMAGE_MODEL)
+
+
+class AddFolderPopupForm(forms.ModelForm):
+ folder = forms.HiddenInput()
-ELEM_ID = re.compile(r'.*$')
+ class Meta:
+ model = Folder
+ fields = ('name',)
-class FolderAdmin(FolderPermissionModelAdmin):
+class FolderAdmin(PrimitivePermissionAwareModelAdmin):
list_display = ('name',)
- list_per_page = 20
+ exclude = ('parent',)
+ list_per_page = 100
list_filter = ('owner',)
- search_fields = ['name', 'files__name']
-
- actions_affecting_position = [
- 'move_to_clipboard',
- 'delete_files_or_folders',
- 'move_files_and_folders',
- ]
- actions_restrictions = [
- 'disable_restriction',
- 'enable_restriction',
- ] if getattr(settings, 'FILER_ENABLE_RESTRICTION_ACTIONS', True) else []
- actions = actions_restrictions + [
- 'copy_files_and_folders',
- 'extract_files',
- ] + actions_affecting_position
-
- # form fields
- exclude = ('parent', 'owner', 'folder_type')
- raw_id_fields = ('owner', )
-
- def get_readonly_fields(self, request, obj=None):
- self.readonly_fields = [ro_field
- for ro_field in self.readonly_fields]
- self._make_restricted_field_readonly(request.user, obj)
- return super(FolderAdmin, self).get_readonly_fields(
- request, obj)
-
- def _get_sites_available_for_user(self, user):
- if user.is_superuser:
- return Site.objects.all()
- admin_sites = [site.id
- for site in get_admin_sites_for_user(user)]
- return Site.objects.filter(id__in=admin_sites)
-
- def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
- """
- Filters sites available to the user based on his roles on sites
- """
- formfield = super(FolderAdmin, self).formfield_for_foreignkey(
- db_field, request, **kwargs)
- if request and db_field.remote_field.model is Site:
- formfield.queryset = self._get_sites_available_for_user(
- request.user)
- return formfield
-
- def formfield_for_manytomany(self, db_field, request, **kwargs):
- """
- Filters sites available to the user based on his roles on sites
- """
- formfield = super(FolderAdmin, self).formfield_for_manytomany(
- db_field, request, **kwargs)
- if request and db_field.remote_field.model is Site:
- formfield.queryset = self._get_sites_available_for_user(
- request.user)
- return formfield
+ search_fields = ['name']
+ autocomplete_fields = ['owner']
+ save_as = True # see ImageAdmin
+ actions = ['delete_files_or_folders', 'move_files_and_folders',
+ 'copy_files_and_folders', 'resize_images', 'rename_files']
+
+ if DJANGO_VERSION >= (5, 2):
+ directory_listing_template = 'admin/filer/folder/directory_listing.html'
+ else: # Remove this when Django 5.2 is the minimum version
+ directory_listing_template = 'admin/filer/folder/legacy_listing.html'
+
+ order_by_file_fields = ['_file_size', 'original_filename', 'name', 'owner',
+ 'uploaded_at', 'modified_at']
def get_form(self, request, obj=None, **kwargs):
"""
Returns a Form class for use in the admin add view. This is used by
add_view and change_view.
-
- Sets the parent folder and owner for the folder that will be edited
- in the form
"""
-
- folder_form = super(FolderAdmin, self).get_form(
- request, obj=obj, **kwargs)
-
- if 'site' in folder_form.base_fields:
- folder_form.base_fields['site'].widget.can_add_related = False
- folder_form.base_fields['site'].widget.can_delete_related = False
- folder_form.base_fields['site'].widget.can_change_related = False
-
- if 'shared' in folder_form.base_fields:
- folder_form.base_fields['shared'].widget.can_add_related = False
-
- # do show share sites field only for superusers
- if not request.user.is_superuser:
- folder_form.base_fields.pop('shared', None)
-
- # check if site field should be visible in the form or not
- is_core_folder = False
- if obj and obj.pk:
- # change view
- parent_id = obj.parent_id
- is_core_folder = obj.is_core()
+ parent_id = request.GET.get('parent_id', None)
+ if not parent_id:
+ parent_id = request.POST.get('parent_id', None)
+ if parent_id:
+ return AddFolderPopupForm
else:
- # add view
- parent_id = get_param_from_request(request, 'parent_id')
- folder_form.base_fields.pop('restricted', None)
-
- # shouldn't show site field if has parent or is core folder
- pop_site_fields = parent_id or is_core_folder
- if pop_site_fields:
- folder_form.base_fields.pop('site', None)
- folder_form.base_fields.pop('shared', None)
-
- def clean(form_instance):
- # make sure owner and parent are passed to the model clean method
- current_folder = form_instance.instance
- if not current_folder.owner:
- current_folder.owner = request.user
- if parent_id:
- current_folder.parent = Folder.objects.get(id=parent_id)
- return form_instance.cleaned_data
-
- folder_form.clean = clean
- return folder_form
+ folder_form = super().get_form(
+ request, obj=None, **kwargs)
+
+ def folder_form_clean(form_obj):
+ cleaned_data = form_obj.cleaned_data
+ folders_with_same_name = self.get_queryset(request).filter(
+ parent=form_obj.instance.parent,
+ name=cleaned_data['name'])
+ if form_obj.instance.pk:
+ folders_with_same_name = folders_with_same_name.exclude(
+ pk=form_obj.instance.pk)
+ if folders_with_same_name.exists():
+ raise ValidationError(
+ 'Folder with this name already exists.')
+ return cleaned_data
+
+ # attach clean to the default form rather than defining a new form class
+ folder_form.clean = folder_form_clean
+ return folder_form
+
+ def save_form(self, request, form, change):
+ """
+ Given a ModelForm return an unsaved instance. ``change`` is True if
+ the object is being changed, and False if it's being added.
+ """
+ if not change:
+ # New folder invalidates the folder permission cache (or it will not be visible)
+ clear_folder_permission_cache(request.user)
+ r = form.save(commit=False)
+ parent_id = request.GET.get('parent_id', None)
+ if not parent_id:
+ parent_id = request.POST.get('parent_id', None)
+ if parent_id:
+ parent = self.get_queryset(request).get(id=parent_id)
+ r.parent = parent
+ return r
+
+ def response_change(self, request, obj):
+ """
+ Overrides the default to be able to forward to the directory listing
+ instead of the default change_list_view
+ """
+ if (
+ request.POST
+ and '_continue' not in request.POST
+ and '_saveasnew' not in request.POST
+ and '_addanother' not in request.POST
+ ):
+
+ if obj.parent:
+ url = reverse('admin:filer-directory_listing',
+ kwargs={'folder_id': obj.parent.id})
+ else:
+ url = reverse('admin:filer-directory_listing-root')
+ url = "{}{}".format(
+ url,
+ admin_url_params_encoded(request),
+ )
+ return HttpResponseRedirect(url)
+ return super().response_change(request, obj)
+
+ def render_change_form(self, request, context, add=False, change=False,
+ form_url='', obj=None):
+ info = self.model._meta.app_label, self.model._meta.model_name
+ extra_context = {'show_delete': True,
+ 'history_url': 'admin:%s_%s_history' % info,
+ 'is_popup': popup_status(request),
+ 'filer_admin_context': AdminContext(request)}
+ context.update(extra_context)
+ return super().render_change_form(
+ request=request, context=context, add=add,
+ change=change, form_url=form_url, obj=obj)
+
+ def delete_view(self, request, object_id, extra_context=None):
+ """
+ Overrides the default to enable redirecting to the directory view after
+ deletion of a folder.
+
+ we need to fetch the object and find out who the parent is
+ before super, because super will delete the object and make it
+ impossible to find out the parent folder to redirect to.
+
+ The delete_view breaks with polymorphic models if the cascade will
+ try delete objects that are of different polymorphic types
+ (AttributeError: 'File' object has no attribute 'file_ptr').
+ The default implementation of the delete_view is hard to override
+ without just copying the whole big thing. Since we've already done
+ the overriding work on the delete_files_or_folders admin action, we
+ can re-use that here instead.
+ """
+ try:
+ obj = self.get_queryset(request).get(pk=unquote(object_id))
+ parent_folder = obj.parent
+ except self.model.DoesNotExist:
+ parent_folder = None
+
+ if request.POST:
+ self.delete_files_or_folders(
+ request,
+ files_queryset=File.objects.none(),
+ folders_queryset=self.get_queryset(request).filter(id=object_id)
+ )
+ if parent_folder:
+ url = reverse('admin:filer-directory_listing',
+ kwargs={'folder_id': parent_folder.id})
+ else:
+ url = reverse('admin:filer-directory_listing-root')
+ url = "{}{}".format(
+ url,
+ admin_url_params_encoded(request),
+ )
+ return HttpResponseRedirect(url)
+
+ return self.delete_files_or_folders(
+ request,
+ files_queryset=File.objects.none(),
+ folders_queryset=self.get_queryset(request).filter(id=object_id)
+ )
def icon_img(self, xs):
- return mark_safe((' ') % FILER_STATICMEDIA_PREFIX)
+ return format_html(' ', django_settings.STATIC_ROOT)
+ icon_img.allow_tags = True
def get_urls(self):
- urls = super(FolderAdmin, self).get_urls()
- url_patterns = [
+ return [
# we override the default list view with our own directory listing
# of the root directories
- re_path(r'^$', self.admin_site.admin_view(self.directory_listing),
- name='filer-directory_listing-root'),
- re_path(r'^(?P\d+)/list/$',
- self.admin_site.admin_view(self.directory_listing),
- name='filer-directory_listing'),
- re_path(r'^make_folder/$',
- self.admin_site.admin_view(self.make_folder),
- name='filer-directory_listing-make_root_folder'),
- re_path(r'^images_with_missing_data/$',
- self.admin_site.admin_view(self.directory_listing),
- {'viewtype': 'images_with_missing_data'},
- name='filer-directory_listing-images_with_missing_data'),
- re_path(r'^unfiled_images/$',
- self.admin_site.admin_view(self.directory_listing),
- {'viewtype': 'unfiled_images'},
- name='filer-directory_listing-unfiled_images'),
- re_path(r'^destination_folders/$',
- self.admin_site.admin_view(self.destination_folders),
- name='filer-destination_folders'),
- ]
- url_patterns.extend(urls)
- return url_patterns
-
- def add_view(self, request, *args, **kwargs):
- raise PermissionDenied
-
- def make_folder(self, request, folder_id=None, *args, **kwargs):
- response = super(FolderAdmin, self).add_view(request, *args, **kwargs)
-
- # since filer overwrites django's dismissPopup we need to make sure
- # that the response from django's add_view is the
- # dismiss popup response so we can overwrite it
- # since only save button appears its enough to make sure that the
- # request is a POST from a popup view and the response is a
- # successed HttpResponse
- if (request.method == 'POST' and popup_status(request) and
- not isinstance(response, HttpResponseRedirect)):
- # In Django 4.2+, a successful popup add returns status 200 with
- # dismiss script. A form validation error also returns 200 but
- # with a re-rendered form. Only show dismiss when there are no
- # form errors (i.e. no 'errorlist' in the rendered content).
- if hasattr(response, 'render'):
- response = response.render()
- content = getattr(response, 'content', b'')
- if response.status_code == 200 and b'errorlist' not in content:
- return HttpResponse('')
- return response
-
- def delete_view(self, request, object_id, extra_context=None):
- # override delete view since we need to hide already trashed
- # files/folders
- opts = self.model._meta
- obj = self.get_object(request, unquote(object_id))
-
- if obj is None:
- raise Http404(_('%(name)s object with primary key %(key)r '
- 'does not exist.') % {
- 'name': force_str(opts.verbose_name),
- 'key': escape(object_id)})
- if obj.parent:
- redirect_url = reverse('admin:filer-directory_listing',
- kwargs={'folder_id': obj.parent_id})
- else:
- redirect_url = reverse('admin:filer-directory_listing-root')
- redirect_url = "%s%s%s%s" % (redirect_url, popup_param(request),
- selectfolder_param(request, "&"),
- current_site_param(request),)
-
- setattr(request, 'current_dir_list_folder',
- obj.parent or FolderRoot())
-
- response = self.delete_files_or_folders(
- request,
- File.objects.none(),
- Folder.objects.filter(id=obj.id))
-
- if response is None:
- return HttpResponseRedirect(redirect_url)
- return response
+ path('',
+ self.admin_site.admin_view(self.directory_listing),
+ name='filer-directory_listing-root'),
+
+ path('last/',
+ self.admin_site.admin_view(self.directory_listing),
+ {'viewtype': 'last'},
+ name='filer-directory_listing-last'),
+
+ path('/list/',
+ self.admin_site.admin_view(self.directory_listing),
+ name='filer-directory_listing'),
+
+ path('/make_folder/',
+ self.admin_site.admin_view(views.make_folder),
+ name='filer-directory_listing-make_folder'),
+ path('make_folder/',
+ self.admin_site.admin_view(views.make_folder),
+ name='filer-directory_listing-make_root_folder'),
+
+ path('images_with_missing_data/',
+ self.admin_site.admin_view(self.directory_listing),
+ {'viewtype': 'images_with_missing_data'},
+ name='filer-directory_listing-images_with_missing_data'),
+
+ path('unfiled_images/',
+ self.admin_site.admin_view(self.directory_listing),
+ {'viewtype': 'unfiled_images'},
+ name='filer-directory_listing-unfiled_images'),
+ ] + super().get_urls()
# custom views
def directory_listing(self, request, folder_id=None, viewtype=None):
- user = request.user
- clipboard = tools.get_user_clipboard(user)
- file_type = request.GET.get('file_type', None)
+ if not request.user.has_perm("filer.can_use_directory_listing"):
+ raise PermissionDenied()
+ clipboard = tools.get_user_clipboard(request.user)
if viewtype == 'images_with_missing_data':
folder = ImagesWithMissingData()
- folder_file_qs = folder.files
elif viewtype == 'unfiled_images':
- folder = UnfiledImages()
- folder_file_qs = folder.files
- elif folder_id is None:
- folder = FolderRoot()
- folder_file_qs = File.objects.none()
- else:
+ # pass user in the class invocation, so that we can get
+ # access to the current user instance in the class
+ folder = UnsortedImages(user=request.user)
+ elif viewtype == 'last':
+ last_folder_id = request.session.get('filer_last_folder_id')
try:
- folder = Folder.objects.get(id=folder_id)
- if not self.can_view_folder_content(request, folder):
- raise PermissionDenied
- except Folder.DoesNotExist:
- raise Http404
- if file_type == 'image':
- folder_file_qs = Image.objects.filter(folder=folder)
+ self.get_queryset(request).get(id=last_folder_id)
+ except self.model.DoesNotExist:
+ url = reverse('admin:filer-directory_listing-root')
+ url = f"{url}{admin_url_params_encoded(request)}"
else:
- folder_file_qs = File.objects.filter(folder=folder)
-
- if file_type == 'image':
- all_file_qs = Image.objects
+ url = reverse('admin:filer-directory_listing', kwargs={'folder_id': last_folder_id})
+ url = f"{url}{admin_url_params_encoded(request)}"
+ return HttpResponseRedirect(url)
+ elif folder_id is None:
+ folder = FolderRoot()
else:
- all_file_qs = File.objects
-
- setattr(request, 'current_dir_list_folder', folder)
- # search
- q = request.GET.get('q', None)
- if q:
- search_terms = q.split(" ")
+ folder = get_object_or_404(self.get_queryset(request), id=folder_id)
+ request.session['filer_last_folder_id'] = folder_id
+
+ list_type = get_directory_listing_type(request) or settings.FILER_FOLDER_ADMIN_DEFAULT_LIST_TYPE
+ if list_type == TABLE_LIST_TYPE:
+ # Prefetch thumbnails for table view
+ size = f"{FILER_TABLE_ICON_SIZE}x{FILER_TABLE_ICON_SIZE}"
+ size_x2 = f"{2 * FILER_TABLE_ICON_SIZE}x{2 * FILER_TABLE_ICON_SIZE}"
else:
- search_terms = []
- q = ''
+ # Prefetch thumbnails for thumbnail view
+ size = f"{FILER_THUMBNAIL_ICON_SIZE}x{FILER_THUMBNAIL_ICON_SIZE}"
+ size_x2 = f"{2 * FILER_THUMBNAIL_ICON_SIZE}x{2 * FILER_THUMBNAIL_ICON_SIZE}"
# Check actions to see if any are available on this changelist
- # do not let any actions available if we're in search view since
- # there is no way to detect the current folder
- actions = {}
- if not search_terms:
- actions = self.get_actions(request)
+ actions = self.get_actions(request)
# Remove action checkboxes if there aren't any actions available.
list_display = list(self.list_display)
@@ -304,77 +297,127 @@ def directory_listing(self, request, folder_id=None, viewtype=None):
except ValueError:
pass
+ # search
+ q = request.GET.get('q')
+ if q:
+ search_terms = urlunquote(q).split(' ')
+ search_mode = True
+ else:
+ search_terms = []
+ q = ''
+ search_mode = False
+ # Limit search results to current folder.
limit_search_to_folder = request.GET.get('limit_search_to_folder',
False) in (True, 'on')
- current_site = request.GET.get('current_site', None)
- _filter_folders = partial(folders_available, current_site, request.user)
- _filter_files = partial(files_available, current_site, request.user)
if len(search_terms) > 0:
if folder and limit_search_to_folder and not folder.is_root:
- descendants = folder.get_descendants(
- include_self=True).filter(deleted_at__isnull=True)
- folder_qs = _filter_folders(descendants.exclude(id=folder.id))
- file_qs = _filter_files(all_file_qs.filter(folder__in=descendants))
+ desc_folder_ids = folder.get_descendants_ids()
+ # Do not include current folder itself in search results.
+ folder_qs = Folder.objects.filter(pk__in=desc_folder_ids)
+ # Limit search results to files in the current folder or any
+ # nested folder.
+ file_qs = File.objects.filter(folder_id__in=desc_folder_ids + [folder.pk])
else:
- folder_qs = _filter_folders(Folder.objects.all())
- file_qs = _filter_files(all_file_qs)
-
- def folder_search_qs(qs, terms=[]):
- for term in terms:
- qs = qs.filter(Q(name__icontains=term) |
- Q(owner__username__icontains=term) |
- Q(owner__first_name__icontains=term) |
- Q(owner__last_name__icontains=term))
- return qs
-
- def file_search_qs(qs, terms=[]):
- for term in terms:
- qs = qs.filter(Q(name__icontains=term) |
- Q(description__icontains=term) |
- Q(original_filename__icontains=term) |
- Q(owner__username__icontains=term) |
- Q(owner__first_name__icontains=term) |
- Q(owner__last_name__icontains=term))
- return qs
-
- folder_qs = folder_search_qs(folder_qs, search_terms)
- file_qs = file_search_qs(file_qs, search_terms)
+ folder_qs = self.get_queryset(request)
+ file_qs = File.objects.all()
+ folder_qs = self.filter_folder(folder_qs, search_terms).prefetch_related("children", "all_files")
+ file_qs = self.filter_file(file_qs, search_terms)
+
show_result_count = True
else:
- folder_qs = _filter_folders(folder.children.all())
- file_qs = _filter_files(folder_file_qs)
+ folder_qs = folder.children.all()
+ file_qs = folder.files.all()
show_result_count = False
- folder_qs = folder_qs.order_by('name')
- file_qs = file_qs.order_by('name')
- if show_result_count:
- show_result_count = {
- 'files_found': file_qs.count(),
- 'folders_found': folder_qs.count(),
+ folder_qs = folder_qs.order_by('name').select_related("owner")
+ order_by = request.GET.get('order_by', None)
+ order_by_annotation = None
+ if order_by is None:
+ order_by_annotation = Lower(Coalesce(
+ Case(
+ When(name__exact='', then=None),
+ When(name__isnull=False, then='name')
+ ),
+ 'original_filename'
+ ))
+
+ order_by = order_by.split(',') if order_by else []
+ order_by = [field for field in order_by
+ if re.sub(r'^-', '', field) in self.order_by_file_fields]
+ if len(order_by) > 0:
+ file_qs = file_qs.order_by(*order_by)
+ elif order_by_annotation:
+ file_qs = file_qs.order_by(order_by_annotation)
+
+ if folder.is_root and not search_mode:
+ virtual_items = folder.virtual_folders
+ else:
+ virtual_items = []
+
+ perms = FolderPermission.objects.get_read_id_list(request.user)
+ if perms != 'All':
+ file_qs = file_qs.filter(
+ models.Q(folder__id__in=perms)
+ | models.Q(folder_id__isnull=True)
+ | models.Q(owner=request.user)
+ )
+ folder_qs = folder_qs.filter(models.Q(id__in=perms) | models.Q(owner=request.user))
+ root_exclude_kwargs = {'parent__isnull': False, 'parent__id__in': perms}
+ else:
+ root_exclude_kwargs = {'parent__isnull': False}
+ if folder.is_root:
+ folder_qs = folder_qs.exclude(**root_exclude_kwargs)
+
+ # Annotate thumbnail status
+ thumbnail_qs = (
+ Thumbnail.objects
+ .filter(
+ source__name=OuterRef("file"),
+ modified__gte=F("source__modified"),
+ )
+ .exclude(name__contains="upscale") # TODO: Check WHY not used by directory listing
+ .order_by("-modified")
+ )
+ file_qs = file_qs.annotate(
+ thumbnail_name=Subquery(thumbnail_qs.filter(name__contains=f"__{size}_").values_list("name")[:1]),
+ thumbnailx2_name=Subquery(thumbnail_qs.filter(name__contains=f"__{size_x2}_").values_list("name")[:1])
+ ).select_related("owner")
+
+ try:
+ permissions = {
+ 'has_edit_permission': folder.has_edit_permission(request),
+ 'has_read_permission': folder.has_read_permission(request),
+ 'has_add_children_permission':
+ folder.has_add_children_permission(request),
}
+ except: # noqa
+ permissions = {}
- items = MultiMoldelQuerysetChain([folder_qs, file_qs])
+ items = list(itertools.chain(folder_qs, file_qs))
paginator = Paginator(items, FILER_PAGINATE_BY)
# Are we moving to clipboard?
if request.method == 'POST' and '_save' not in request.POST:
- for f in file_qs:
+ # TODO: Refactor/remove clipboard parts
+ for f in folder_qs:
if "move-to-clipboard-%d" % (f.id,) in request.POST:
- if (f.is_readonly_for_user(user) or
- f.is_restricted_for_user(user)):
+ clipboard = tools.get_user_clipboard(request.user)
+ if f.has_edit_permission(request):
+ tools.move_file_to_clipboard([f], clipboard)
+ return HttpResponseRedirect(request.get_full_path())
+ else:
raise PermissionDenied
- tools.move_file_to_clipboard(request, [f], clipboard)
- return HttpResponseRedirect(request.get_full_path())
selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
# Actions with no confirmation
- if (actions and request.method == 'POST' and
- 'index' in request.POST and '_save' not in request.POST):
+ if (
+ actions and request.method == 'POST'
+ and 'index' in request.POST
+ and '_save' not in request.POST
+ ):
if selected:
- response = self.response_action(request,
- files_queryset=file_qs,
- folders_queryset=folder_qs)
+ response = self.response_action(request, files_queryset=file_qs, folders_queryset=folder_qs)
if response:
return response
else:
@@ -383,71 +426,127 @@ def file_search_qs(qs, terms=[]):
self.message_user(request, msg)
# Actions with confirmation
- if (actions and request.method == 'POST' and
- helpers.ACTION_CHECKBOX_NAME in request.POST and
- 'index' not in request.POST and '_save' not in request.POST):
+ if (
+ actions and request.method == 'POST'
+ and helpers.ACTION_CHECKBOX_NAME in request.POST
+ and 'index' not in request.POST
+ and '_save' not in request.POST
+ ):
if selected:
- response = self.response_action(request,
- files_queryset=file_qs,
- folders_queryset=folder_qs)
+ response = self.response_action(request, files_queryset=file_qs, folders_queryset=folder_qs)
if response:
return response
# Build the action form and populate it with available actions.
if actions:
action_form = self.action_form(auto_id=None)
- action_form.fields['action'].choices = \
- self.get_action_choices(request)
+ action_form.fields['action'].choices = self.get_action_choices(request)
else:
action_form = None
- selection_note_all = ngettext_lazy(
- '%(total_count)s selected',
- 'All %(total_count)s selected',
- paginator.count
- )
- # Make sure page request is an int. If not, deliver first page.
- try:
- page = int(request.GET.get('page', '1'))
- except ValueError:
- page = 1
+ selection_note_all = ngettext_lazy('%(total_count)s selected',
+ 'All %(total_count)s selected', paginator.count)
# If page request (9999) is out of range, deliver last page of results.
try:
- paginated_items = paginator.page(page)
- except (EmptyPage, InvalidPage):
+ paginated_items = paginator.page(request.GET.get('page', 1))
+ except PageNotAnInteger:
+ paginated_items = paginator.page(1)
+ except EmptyPage:
paginated_items = paginator.page(paginator.num_pages)
- context = self.admin_site.each_context(request)
+
+ context = self.admin_site.each_context(request)
context.update({
- 'folder': folder,
- 'user_clipboard': clipboard,
- 'clipboard_files': clipboard.files.distinct(),
- 'current_site': get_param_from_request(request, 'current_site'),
- 'paginator': paginator,
- 'paginated_items': paginated_items,
- 'current_url': request.path,
- 'title': 'Directory listing for %s' % folder.name,
- 'search_string': ' '.join(search_terms),
- 'q': q,
- 'show_result_count': show_result_count,
- 'limit_search_to_folder': limit_search_to_folder,
- 'is_popup': popup_status(request),
- 'select_folder': selectfolder_status(request),
- # needed in the admin/base.html template for logout links
- 'root_path': reverse('admin:index'),
- 'action_form': action_form,
- 'actions_on_top': self.actions_on_top,
- 'actions_on_bottom': self.actions_on_bottom,
- 'actions_selection_counter': self.actions_selection_counter,
- 'selection_note': _('0 of %(cnt)s selected') % {
- 'cnt': len(paginated_items.object_list)},
- 'selection_note_all': selection_note_all % {
- 'total_count': paginator.count},
- 'media': self.media,
- 'file_type': file_type,
- })
- response = render(request, 'admin/filer/folder/directory_listing.html', context)
- return response
+ 'folder': folder,
+ 'clipboard_files': File.objects.filter(
+ in_clipboards__clipboarditem__clipboard__user=request.user
+ ).distinct(),
+ 'paginator': paginator,
+ 'paginated_items': paginated_items,
+ 'virtual_items': virtual_items,
+ 'uploader_connections': settings.FILER_UPLOADER_CONNECTIONS,
+ 'max_files': settings.FILER_UPLOADER_MAX_FILES,
+ 'max_filesize': settings.FILER_UPLOADER_MAX_FILE_SIZE,
+ 'permissions': permissions,
+ 'permstest': userperms_for_request(folder, request),
+ 'current_url': request.path,
+ 'title': _('Directory listing for %(folder_name)s') % {'folder_name': folder.name},
+ 'search_string': ' '.join(search_terms),
+ 'q': urlquote(q),
+ 'show_result_count': show_result_count,
+ 'folder_children': folder_qs,
+ 'folder_files': file_qs,
+ 'thumbnail_size': FILER_TABLE_ICON_SIZE if list_type == TABLE_LIST_TYPE else FILER_THUMBNAIL_ICON_SIZE,
+ 'limit_search_to_folder': limit_search_to_folder,
+ 'is_popup': popup_status(request),
+ 'filer_admin_context': AdminContext(request),
+ # needed in the admin/base.html template for logout links
+ 'root_path': reverse('admin:index'),
+ 'action_form': action_form,
+ 'actions_on_top': self.actions_on_top,
+ 'actions_on_bottom': self.actions_on_bottom,
+ 'actions_selection_counter': self.actions_selection_counter,
+ 'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(paginated_items.object_list)},
+ 'selection_note_all': selection_note_all % {'total_count': paginator.count},
+ 'list_type': list_type,
+ 'list_type_template': settings.FILER_FOLDER_ADMIN_LIST_TYPE_SWITCHER_SETTINGS[list_type]['template'],
+ 'media': self.media,
+ 'enable_permissions': settings.FILER_ENABLE_PERMISSIONS,
+ 'can_make_folder': request.user.is_superuser or (folder.is_root and settings.FILER_ALLOW_REGULAR_USERS_TO_ADD_ROOT_FOLDERS) or permissions.get("has_add_children_permission"),
+ })
+ return TemplateResponse(request, self.directory_listing_template, context)
+
+ def filter_folder(self, qs, terms=()):
+ # Source: https://github.com/django/django/blob/1.7.1/django/contrib/admin/options.py#L939-L947 flake8: noqa
+ def construct_search(field_name):
+ if field_name.startswith('^'):
+ return "%s__istartswith" % field_name[1:]
+ elif field_name.startswith('='):
+ return "%s__iexact" % field_name[1:]
+ elif field_name.startswith('@'):
+ return "%s__search" % field_name[1:]
+ else:
+ return "%s__icontains" % field_name
+
+ for term in terms:
+ filters = models.Q()
+ for filter_ in self.search_fields:
+ filters |= models.Q(**{construct_search(filter_): term})
+ for filter_ in self.get_owner_filter_lookups():
+ filters |= models.Q(**{filter_: term})
+ qs = qs.filter(filters)
+ return qs
+
+ def filter_file(self, qs, terms=()):
+ for term in terms:
+ filters = (models.Q(name__icontains=term)
+ | models.Q(description__icontains=term)
+ | models.Q(original_filename__icontains=term))
+ for filter_ in self.get_owner_filter_lookups():
+ filters |= models.Q(**{filter_: term})
+ qs = qs.filter(filters)
+ return qs
+
+ @property
+ def owner_search_fields(self):
+ """
+ Returns all the fields that are CharFields except for password from the
+ User model. For the built-in User model, that means username,
+ first_name, last_name, and email.
+ """
+ from django.contrib.auth import get_user_model
+ User = get_user_model()
+
+ return [
+ field.name for field in User._meta.fields
+ if isinstance(field, models.CharField) and field.name != 'password'
+ ]
+
+ def get_owner_filter_lookups(self):
+ return [
+ f'owner__{field}__icontains'
+ for field in self.owner_search_fields
+ ]
def response_action(self, request, files_queryset, folders_queryset):
"""
@@ -492,8 +591,8 @@ def response_action(self, request, files_queryset, folders_queryset):
# the action explicitly on all objects.
selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
if not selected and not select_across:
- # Reminder that something needs to be selected or
- # nothing will happen
+ # Reminder that something needs to be selected or nothing
+ # will happen
msg = _("Items must be selected in order to perform "
"actions on them. No items have been changed.")
self.message_user(request, msg)
@@ -529,162 +628,196 @@ def response_action(self, request, files_queryset, folders_queryset):
return None
def get_actions(self, request):
- actions = super(FolderAdmin, self).get_actions(request)
+ if settings.FILER_ENABLE_PERMISSIONS:
+ actions = OrderedDict()
+ actions['files_set_public'] = self.get_action('files_set_public')
+ actions['files_set_private'] = self.get_action('files_set_private')
+ actions.update(super().get_actions(request))
+ else:
+ actions = super().get_actions(request)
+
+ if 'delete_selected' in actions:
+ del actions['delete_selected']
+ return actions
+
+ def move_to_clipboard(self, request, files_queryset, folders_queryset):
+ """
+ Action which moves the selected files and files in selected folders
+ to clipboard.
+ """
- def pop_actions(*actions_to_remove):
- for action in actions_to_remove:
- actions.pop(action, None)
+ if not self.has_change_permission(request):
+ raise PermissionDenied
- pop_actions('delete_selected')
+ if request.method != 'POST':
+ return None
- if not self.has_delete_permission(request, None):
- pop_actions(*self.actions_affecting_position)
+ clipboard = tools.get_user_clipboard(request.user)
- current_folder = getattr(request, 'current_dir_list_folder', None)
- if not current_folder:
- return actions
+ check_files_edit_permissions(request, files_queryset)
+ check_folder_edit_permissions(request, folders_queryset)
- if current_folder.is_root:
- pop_actions('extract_files')
+ # TODO: Display a confirmation page if moving more than X files to
+ # clipboard?
- if (not current_folder.is_root and
- current_folder.is_readonly_for_user(request.user)):
- return {}
+ # We define it like that so that we can modify it inside the
+ # move_files function
+ files_count = [0]
- if isinstance(current_folder, UnfiledImages):
- pop_actions('enable_restriction', 'copy_files_and_folders',
- 'disable_restriction')
- return actions
+ def move_files(files):
+ files_count[0] += tools.move_file_to_clipboard(files, clipboard)
- # actions are available for descendants not for current folder
- if not (current_folder.can_change_restricted(request.user) and
- not current_folder.restricted):
- pop_actions('enable_restriction', 'disable_restriction')
+ def move_folders(folders):
+ for f in folders:
+ move_files(f.files)
+ move_folders(f.children.all())
- if (actions and current_folder.is_restricted_for_user(request.user)):
- # allow only copy
- if 'copy_files_and_folders' in actions:
- return {'copy_files_and_folders':
- actions['copy_files_and_folders']}
+ move_files(files_queryset)
+ move_folders(folders_queryset)
- return actions
+ self.message_user(request, _("Successfully moved %(count)d files to "
+ "clipboard.") % {"count": files_count[0]})
- def move_to_clipboard(self, request, files_queryset, folders_queryset):
+ return None
+
+ move_to_clipboard.short_description = _("Move selected files to clipboard")
+
+ def files_set_public_or_private(self, request, set_public, files_queryset,
+ folders_queryset):
"""
- Action which moves the selected files to clipboard.
+ Action which enables or disables permissions for selected files and
+ files in selected folders to clipboard (set them private or public).
"""
- if request.method != 'POST':
- return None
- if not has_multi_file_action_permission(
- request, files_queryset,
- Folder.objects.none()):
+ if not self.has_change_permission(request):
raise PermissionDenied
- clipboard = tools.get_user_clipboard(request.user)
+ permissions_enabled = settings.FILER_ENABLE_PERMISSIONS
+
+ if request.method != 'POST' or not permissions_enabled:
+ return None
+
+ check_files_edit_permissions(request, files_queryset)
+ check_folder_edit_permissions(request, folders_queryset)
+
# We define it like that so that we can modify it inside the
- # move_files function
+ # set_files function
files_count = [0]
- def move_files(files):
- files_count[0] += tools.move_file_to_clipboard(
- request, files, clipboard)
+ def set_files(files):
+ for f in files:
+ if f.is_public != set_public:
+ f.is_public = set_public
+ f.save()
+ files_count[0] += 1
- move_files(files_queryset)
- if files_count[0] > 0:
- self.message_user(request,
- _("Successfully moved %(count)d files to clipboard.") % {
- "count": files_count[0], })
+ def set_folders(folders):
+ for f in folders:
+ set_files(f.files)
+ set_folders(f.children.all())
+
+ set_files(files_queryset)
+ set_folders(folders_queryset)
+
+ if set_public:
+ self.message_user(request, _("Successfully disabled permissions for %(count)d files.") % {"count": files_count[0], })
else:
- self.message_user(request,
- _("No files were moved to clipboard."))
+ self.message_user(request, _("Successfully enabled permissions for %(count)d files.") % {"count": files_count[0], })
+
return None
- move_to_clipboard.short_description = gettext_lazy(
- "Move selected files to clipboard")
-
- def _get_unique_items(self, deletable_items, unique_items, depth=5):
- count = 0
- if depth < 0:
- return count
- for elem in deletable_items:
- if isinstance(elem, (list, tuple)):
- count += self._get_unique_items(elem, unique_items, depth-1)
- elif isinstance(elem, str):
- match = ELEM_ID.match(elem)
- elem_id = match and match.group('file_id')
- if elem_id and elem_id not in unique_items:
- unique_items.append(elem_id)
- count += 1
- return count
-
- def delete_files_or_folders(self, request,
- files_queryset, folders_queryset):
+ def files_set_private(self, request, files_queryset, folders_queryset):
+ return self.files_set_public_or_private(request, False, files_queryset,
+ folders_queryset)
+
+ files_set_private.short_description = _("Enable permissions for selected files")
+
+ def files_set_public(self, request, files_queryset, folders_queryset):
+ return self.files_set_public_or_private(request, True, files_queryset,
+ folders_queryset)
+
+ files_set_public.short_description = _("Disable permissions for selected files")
+
+ def delete_files_or_folders(self, request, files_queryset, folders_queryset):
"""
Action which deletes the selected files and/or folders.
This action first displays a confirmation page whichs shows all the
- deleteable files and/or folders, or, if the user has no permission
- on one of the related childs (foreignkeys), a "permission denied"
- message.
+ deletable files and/or folders, or, if the user has no permission on
+ one of the related childs (foreignkeys), a "permission denied" message.
- Next, it delets all selected files and/or folders and redirects back
- to the folder.
+ Next, it deletes all selected files and/or folders and redirects back to
+ the folder.
"""
+ opts = self.model._meta
+ app_label = opts.app_label
# Check that the user has delete permission for the actual model
if not self.has_delete_permission(request):
raise PermissionDenied
- if not has_multi_file_action_permission(
- request, files_queryset, folders_queryset):
- raise PermissionDenied
-
- opts = self.model._meta
- app_label = opts.app_label
-
current_folder = self._get_current_action_folder(
request, files_queryset, folders_queryset)
all_protected = []
+ # Populate deletable_objects, a data structure of all related objects
+ # that will also be deleted. Hopefully this also checks for necessary
+ # permissions.
+ # TODO: Check if permissions are really verified
using = router.db_for_write(self.model)
- deletable_files, perms_needed_files, protected_files = \
- get_deleted_objects(
- files_queryset, files_queryset.model._meta,
- request.user, self.admin_site, using)
- files_count = self._get_unique_items(deletable_files, unique_items=[])
- deletable_folders, perms_needed_folders, protected_folders = \
- get_deleted_objects(
- folders_queryset, folders_queryset.model._meta,
- request.user, self.admin_site, using)
- folders_count = self._get_unique_items(deletable_folders, unique_items=[])
+ deletable_files, model_count_files, perms_needed_files, protected_files = get_deleted_objects(files_queryset, files_queryset.model._meta, request.user, self.admin_site, using)
+ deletable_folders, model_count_folder, perms_needed_folders, protected_folders = get_deleted_objects(folders_queryset, folders_queryset.model._meta, request.user, self.admin_site, using)
all_protected.extend(protected_files)
all_protected.extend(protected_folders)
all_deletable_objects = [deletable_files, deletable_folders]
all_perms_needed = perms_needed_files.union(perms_needed_folders)
- # The user has already confirmed the deletion.
- # Do the deletion and return a None to display the change list
- # view again.
+ # The user has already confirmed the deletion. Do the deletion and
+ # return a None to display the change list view again.
if request.POST.get('post'):
if all_perms_needed:
raise PermissionDenied
- total_count = files_count + folders_count
- if total_count:
+ n = files_queryset.count() + folders_queryset.count()
+ if n:
# delete all explicitly selected files
- for file_obj in files_queryset:
- self.log_deletion(request, file_obj, force_str(file_obj))
- file_obj.delete()
+ if DJANGO_VERSION >= (5, 1):
+ self.log_deletions(request, files_queryset)
+ # Still need to delete files individually (not only the database entries)
+ for f in files_queryset:
+ f.delete()
+ else:
+ for f in files_queryset:
+ self.log_deletion(request, f, force_str(f))
+ f.delete()
+ # delete all files in all selected folders and their children
+ # This would happen automatically by ways of the delete
+ # cascade, but then the individual .delete() methods won't be
+ # called and the files won't be deleted from the filesystem.
+ folder_ids = set()
+ for folder in folders_queryset:
+ folder_ids.add(folder.id)
+ folder_ids.update(folder.get_descendants_ids())
+ if DJANGO_VERSION >= (5, 1):
+ qs = File.objects.filter(folder__in=folder_ids)
+ self.log_deletions(request, qs)
+ # Still need to delete files individually (not only the database entries)
+ for f in qs:
+ f.delete()
+ else:
+ for f in File.objects.filter(folder__in=folder_ids):
+ self.log_deletion(request, f, force_str(f))
+ f.delete()
# delete all folders
- for file_id in folders_queryset.values_list('id', flat=True):
- file_obj = Folder.objects.get(id=file_id)
- self.log_deletion(request, file_obj, force_str(file_obj))
- file_obj.delete()
- self.message_user(request,
- _("Successfully deleted %(count)d files "
- "and/or folders.") % {"count": total_count, })
+ if DJANGO_VERSION >= (5, 1):
+ self.log_deletions(request, files_queryset)
+ folders_queryset.delete()
+ else:
+ for f in folders_queryset:
+ self.log_deletion(request, f, force_str(f))
+ f.delete()
+ self.message_user(request, _("Successfully deleted %(count)d files and/or folders.") % {"count": n, })
# Return None to display the change list page again.
return None
@@ -693,7 +826,8 @@ def delete_files_or_folders(self, request,
else:
title = _("Are you sure?")
- context = {
+ context = self.admin_site.each_context(request)
+ context.update({
"title": title,
"instance": current_folder,
"breadcrumbs_action": _("Delete files and/or folders"),
@@ -704,17 +838,20 @@ def delete_files_or_folders(self, request,
"protected": all_protected,
"opts": opts,
'is_popup': popup_status(request),
- 'select_folder': selectfolder_status(request),
+ 'filer_admin_context': AdminContext(request),
"root_path": reverse('admin:index'),
"app_label": app_label,
"action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
- }
- context.update(self.admin_site.each_context(request))
+ })
+
# Display the destination folder selection page
- return render(request, "admin/filer/delete_selected_files_confirmation.html", context)
+ return TemplateResponse(
+ request,
+ "admin/filer/delete_selected_files_confirmation.html",
+ context
+ )
- delete_files_or_folders.short_description = gettext_lazy(
- "Delete selected files and/or folders")
+ delete_files_or_folders.short_description = _("Delete selected files and/or folders")
# Copied from django.contrib.admin.util
def _format_callback(self, obj, user, admin_site, perms_needed):
@@ -726,297 +863,236 @@ def _format_callback(self, obj, user, admin_site, perms_needed):
opts.app_label,
opts.object_name.lower()),
None, (quote(obj._get_pk_val()),))
- get_permission_codename('delete', opts)
- p = '%s.%s' % (opts.app_label,
- get_permission_codename('delete', opts))
- # Also check permissions on individual objects
- if not user.has_perm(p, obj) and not user.has_perm(p):
+ p = get_delete_permission(opts)
+ if not user.has_perm(p):
perms_needed.add(opts.verbose_name)
# Display a link to the admin page.
- return mark_safe('%s: %s ' %
- (escape(capfirst(opts.verbose_name)),
- admin_url,
- escape(obj.actual_name)))
+ return format_html('{}: {} ', escape(capfirst(opts.verbose_name)), admin_url, escape(obj))
else:
# Don't display link to edit, because it either has no
# admin or is edited inline.
- return '%s: %s' % (capfirst(opts.verbose_name),
- force_str(obj.actual_name))
-
- def _get_current_action_folder(self, request, files_qs, folders_qs):
- current_folder = getattr(request, 'current_dir_list_folder', None)
- if current_folder:
- return current_folder
-
- if files_qs:
- return files_qs[0].folder
- elif folders_qs:
- return folders_qs[0].parent
+ return f'{capfirst(opts.verbose_name)}: {force_str(obj)}'
+
+ def _check_copy_perms(self, request, files_queryset, folders_queryset):
+ try:
+ check_files_read_permissions(request, files_queryset)
+ check_folder_read_permissions(request, folders_queryset)
+ except PermissionDenied:
+ return True
+ return False
+
+ def _check_move_perms(self, request, files_queryset, folders_queryset):
+ try:
+ check_files_read_permissions(request, files_queryset)
+ check_folder_read_permissions(request, folders_queryset)
+ check_files_edit_permissions(request, files_queryset)
+ check_folder_edit_permissions(request, folders_queryset)
+ except PermissionDenied:
+ return True
+ return False
+
+ def _get_current_action_folder(self, request, files_queryset,
+ folders_queryset):
+ if files_queryset:
+ return files_queryset[0].folder
+ elif folders_queryset:
+ return folders_queryset[0].parent
else:
return None
def _list_folders_to_copy_or_move(self, request, folders):
for fo in folders:
- yield self._format_callback(
- fo, request.user, self.admin_site, set())
- children = list(self._list_folders_to_copy_or_move(
- request, fo.children.all()))
- children.extend([self._format_callback(
- f, request.user, self.admin_site, set())
- for f in sorted(fo.files)])
+ yield self._format_callback(fo, request.user, self.admin_site, set())
+ children = list(self._list_folders_to_copy_or_move(request, fo.children.all()))
+ children.extend([self._format_callback(f, request.user, self.admin_site, set()) for f in sorted(fo.files)])
if children:
yield children
- def _list_all_to_copy_or_move(self, request,
- files_queryset, folders_queryset):
- to_copy_or_move = list(self._list_folders_to_copy_or_move(
- request, folders_queryset))
- to_copy_or_move.extend([self._format_callback(
- f, request.user, self.admin_site, set())
- for f in sorted(files_queryset)])
+ def _list_all_to_copy_or_move(self, request, files_queryset, folders_queryset):
+ to_copy_or_move = list(self._list_folders_to_copy_or_move(request, folders_queryset))
+ to_copy_or_move.extend([self._format_callback(f, request.user, self.admin_site, set()) for f in sorted(files_queryset)])
return to_copy_or_move
- def _move_files_and_folders_impl(self, files_queryset, folders_queryset,
- destination):
- for f in files_queryset:
- f.folder = destination
- f.save()
- for f_id in folders_queryset.values_list('id', flat=True):
- f = Folder.objects.get(id=f_id)
- f.parent = destination
- f.save()
-
- def _as_folder(self, request_data, param):
- try:
- return Folder.objects.get(id=int(request_data.get(param, None)))
- except (Folder.DoesNotExist, ValueError, TypeError):
- return None
+ def _list_all_destination_folders_recursive(self, request, folders_queryset, current_folder, folders, allow_self, level):
+ for fo in folders:
+ if not allow_self and fo in folders_queryset:
+ # We do not allow moving to selected folders or their descendants
+ continue
- def _clean_destination(self, request, current_folder,
- selected_folders):
- destination = self._as_folder(request.POST, 'destination')
- if not destination:
- raise PermissionDenied
- # check destination permissions
- if not is_valid_destination(request, destination):
- raise PermissionDenied
- # don't allow copy/move from folder to the same folder
- if (hasattr(current_folder, 'pk') and
- destination.pk == current_folder.pk):
- raise PermissionDenied
- # don't allow selected folders to be copied/moved inside
- # themselves or inside any of their descendants
- for folder in selected_folders:
- destination_in_selected = folder.get_descendants(include_self=True).filter(id=destination.pk).exists()
- if destination_in_selected:
- raise PermissionDenied
- return destination
-
- def destination_folders(self, request):
- all_required = all((
- request.method == 'GET',
- is_ajax(request),
- request.user.is_authenticated,
- 'parent' in request.GET
- ))
- if not all_required:
- raise PermissionDenied
+ if not fo.has_read_permission(request):
+ continue
- def _valid_candidates(request, candidates_qs, selected):
- # exclude orphaned/core/shared/restricted or any selected folders
- current_site = request.GET.get('current_site', None)
- return folders_available(current_site, request.user, candidates_qs) \
- .valid_destinations(request.user) \
- .unrestricted(request.user) \
- .exclude(id__in=selected)
-
- current_folder = self._as_folder(request.GET, 'current_folder')
- parent = self._as_folder(request.GET, 'parent')
- selected_ids = [_f for _f in [f_id or None for f_id in json.loads(request.GET.get('selected_folders') or '[]')] if _f]
- candidates = Folder.objects.filter(parent=parent)
- fancytree_candidates = []
- for folder in _valid_candidates(request, candidates, selected_ids):
- has_children = _valid_candidates(
- request, Folder.objects.filter(parent=folder), selected_ids
- ).exists()
- # don't allow move/copy files&folders to itself
- disabled = current_folder and current_folder.pk == folder.pk
- fancytree_candidates.append({
- 'title': folder.name,
- 'key': "%d" % folder.pk,
- 'folder': has_children,
- 'lazy': has_children,
- 'hideCheckbox': disabled,
- 'unselectable': disabled,
- 'icon': folder.icons.get('32', '')
- })
-
- return HttpResponse(
- json.dumps(fancytree_candidates), content_type="application/json")
-
- def move_files_and_folders(self, request,
- selected_files, selected_folders):
- opts = self.model._meta
- app_label = opts.app_label
+ # We do not allow copying/moving back to the folder itself
+ enabled = (allow_self or fo != current_folder) and fo.has_add_children_permission(request)
+ yield (fo, (mark_safe((" " * level) + force_str(fo)), enabled))
+ yield from self._list_all_destination_folders_recursive(request, folders_queryset, current_folder, fo.children.all(), allow_self, level + 1)
- if not has_multi_file_action_permission(request, selected_files, selected_folders):
- messages.error(request, "You are not allowed to move some of the "\
- "files and folders you selected.")
- return
+ def _list_all_destination_folders(self, request, folders_queryset, current_folder, allow_self):
+ root_folders = self.get_queryset(request).filter(parent__isnull=True).order_by('name')
+ return list(self._list_all_destination_folders_recursive(request, folders_queryset, current_folder, root_folders, allow_self, 0))
- if selected_folders.filter(parent=None).exists():
- messages.error(request, "To prevent potential problems, users "
- "are not allowed to move root folders. You may copy folders "
- "and files.")
- return
+ def _move_files_and_folders_impl(self, files_queryset, folders_queryset, destination):
+ files_queryset.update(folder=destination)
+ folders_queryset.update(parent=destination)
- current_folder = self._get_current_action_folder(
- request, selected_files, selected_folders)
- to_move = self._list_all_to_copy_or_move(
- request, selected_files, selected_folders)
+ def move_files_and_folders(self, request, files_queryset, folders_queryset):
+ opts = self.model._meta
+ app_label = opts.app_label
+
+ current_folder = self._get_current_action_folder(request, files_queryset, folders_queryset)
+ perms_needed = self._check_move_perms(request, files_queryset, folders_queryset)
+ to_move = self._list_all_to_copy_or_move(request, files_queryset, folders_queryset)
+ folders = self._list_all_destination_folders(request, folders_queryset, current_folder, False)
if request.method == 'POST' and request.POST.get('post'):
+ if perms_needed:
+ raise PermissionDenied
try:
- destination = self._clean_destination(
- request, current_folder, selected_folders)
- except PermissionDenied:
- messages.error(request, "The destination was not valid so the selected "\
- "files and folders were not moved. Please try again.")
- return
-
- # all folders need to belong to the same site as the
- # destination site folder
- sites_from_folders = \
- set(selected_folders.values_list('site_id', flat=True)) | \
- set(selected_files.exclude(folder__isnull=True).\
- values_list('folder__site_id', flat=True))
-
- if (sites_from_folders and
- None in sites_from_folders):
- messages.error(request, "Some of the selected files/folders "
- "do not belong to any site. Folders need to be assigned "
- "to a site before you can move files/folders from it.")
- return
- elif len(sites_from_folders) > 1:
- # it gets here if selection is made through a search view
- messages.error(request, "You cannot move files/folders that "
- "belong to several sites. Select files/folders that "
- "belong to only one site.")
- return
- elif (sites_from_folders and
- sites_from_folders.pop() != destination.site.id):
- messages.error(request, "Selected files/folders need to "
- "belong to the same site as the destination folder.")
- return
-
- if not self._are_candidate_names_valid(
- request, selected_files, selected_folders, destination):
- return
-
+ destination = self.get_queryset(request).get(pk=request.POST.get('destination'))
+ except self.model.DoesNotExist:
+ raise PermissionDenied
+ folders_dict = dict(folders)
+ if destination not in folders_dict or not folders_dict[destination][1]:
+ raise PermissionDenied
# We count only topmost files and folders here
- n = selected_files.count() + selected_folders.count()
- if n:
- self._move_files_and_folders_impl(
- selected_files, selected_folders, destination)
- self.message_user(request,
- _("Successfully moved %(count)d files and/or "
- "folders to folder '%(destination)s'.") % {
- "count": n,
- "destination": destination,
- })
+ n = files_queryset.count() + folders_queryset.count()
+ conflicting_names = [folder.name for folder in self.get_queryset(request).filter(parent=destination, name__in=folders_queryset.values('name'))]
+ if conflicting_names:
+ messages.error(request, _("Folders with names %s already exist at the selected "
+ "destination") % ", ".join(conflicting_names))
+ elif n:
+ self._move_files_and_folders_impl(files_queryset, folders_queryset, destination)
+ self.message_user(request, _("Successfully moved %(count)d files and/or folders to folder '%(destination)s'.") % {
+ "count": n,
+ "destination": destination,
+ })
return None
- context = {
+ context = self.admin_site.each_context(request)
+ context.update({
"title": _("Move files and/or folders"),
"instance": current_folder,
"breadcrumbs_action": _("Move files and/or folders"),
"to_move": to_move,
- "files_queryset": selected_files,
- "folders_queryset": selected_folders,
+ "destination_folders": folders,
+ "files_queryset": files_queryset,
+ "folders_queryset": folders_queryset,
+ "perms_lacking": perms_needed,
"opts": opts,
"root_path": reverse('admin:index'),
"app_label": app_label,
"action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
- }
- context.update(self.admin_site.each_context(request))
+ })
+
# Display the destination folder selection page
- return render(request, "admin/filer/folder/choose_move_destination.html", context)
+ return TemplateResponse(request, "admin/filer/folder/choose_move_destination.html", context)
- move_files_and_folders.short_description = gettext_lazy(
- "Move selected files and/or folders")
+ move_files_and_folders.short_description = _("Move selected files and/or folders")
- def extract_files(self, request, files_queryset, folder_queryset):
- success_format = "Successfully extracted archive {}."
+ def _rename_file(self, file_obj, form_data, counter, global_counter):
+ original_basename, original_extension = os.path.splitext(file_obj.original_filename)
+ if file_obj.name:
+ current_basename, current_extension = os.path.splitext(file_obj.name)
+ else:
+ current_basename = ""
+ current_extension = ""
+ file_obj.name = form_data['rename_format'] % {
+ 'original_filename': file_obj.original_filename,
+ 'original_basename': original_basename,
+ 'original_extension': original_extension,
+ 'current_filename': file_obj.name or "",
+ 'current_basename': current_basename,
+ 'current_extension': current_extension,
+ 'current_folder': getattr(file_obj.folder, 'name', ''),
+ 'counter': counter + 1, # 1-based
+ 'global_counter': global_counter + 1, # 1-based
+ }
+ file_obj.save()
- files_queryset = files_queryset.filter(
- polymorphic_ctype=ContentType.objects.get_for_model(Archive).id)
- # cannot extract in unfiled files folder
- if files_queryset.filter(folder__isnull=True).exists():
- raise PermissionDenied
+ def _rename_files(self, files, form_data, global_counter):
+ n = 0
+ for f in sorted(files):
+ self._rename_file(f, form_data, n, global_counter + n)
+ n += 1
+ return n
- if not has_multi_file_action_permission(request, files_queryset,
- Folder.objects.none()):
- raise PermissionDenied
+ def _rename_folder(self, folder, form_data, global_counter):
+ return self._rename_files_impl(folder.files.all(), folder.children.all(), form_data, global_counter)
- def is_valid_archive(filer_file):
- is_valid = filer_file.is_valid()
- if not is_valid:
- error_format = "{} is not a valid zip file"
- message = error_format.format(filer_file.clean_actual_name)
- messages.error(request, _(message))
- return is_valid
-
- def has_collisions(filer_file):
- collisions = filer_file.collisions()
- if collisions:
- error_format = "Files/Folders from {archive} with names:"
- error_format += "{names} already exist."
- names = ", ".join(collisions)
- archive = filer_file.clean_actual_name
- message = error_format.format(
- archive=archive,
- names=names,
- )
- messages.error(request, _(message))
- return len(collisions) > 0
-
- for f in files_queryset:
- if not is_valid_archive(f) or has_collisions(f):
- continue
- f.extract()
- message = success_format.format(f.actual_name)
- self.message_user(request, _(message))
- for err_msg in f.extract_errors:
- messages.warning(
- request,
- _("%s: %s" % (f.actual_name, err_msg))
- )
-
- extract_files.short_description = gettext_lazy(
- "Extract selected zip files")
+ def _rename_files_impl(self, files_queryset, folders_queryset, form_data, global_counter):
+ n = 0
+
+ for f in folders_queryset:
+ n += self._rename_folder(f, form_data, global_counter + n)
+
+ n += self._rename_files(files_queryset, form_data, global_counter + n)
+
+ return n
+
+ def rename_files(self, request, files_queryset, folders_queryset):
+ opts = self.model._meta
+ app_label = opts.app_label
+
+ current_folder = self._get_current_action_folder(request, files_queryset, folders_queryset)
+ perms_needed = self._check_move_perms(request, files_queryset, folders_queryset)
+ to_rename = self._list_all_to_copy_or_move(request, files_queryset, folders_queryset)
+
+ if request.method == 'POST' and request.POST.get('post'):
+ if perms_needed:
+ raise PermissionDenied
+ form = RenameFilesForm(request.POST)
+ if form.is_valid():
+ if files_queryset.count() + folders_queryset.count():
+ n = self._rename_files_impl(files_queryset, folders_queryset, form.cleaned_data, 0)
+ self.message_user(request, _("Successfully renamed %(count)d files.") % {
+ "count": n,
+ })
+ return None
+ else:
+ form = RenameFilesForm()
+
+ context = self.admin_site.each_context(request)
+ context.update({
+ "title": _("Rename files"),
+ "instance": current_folder,
+ "breadcrumbs_action": _("Rename files"),
+ "to_rename": to_rename,
+ "rename_form": form,
+ "files_queryset": files_queryset,
+ "folders_queryset": folders_queryset,
+ "perms_lacking": perms_needed,
+ "opts": opts,
+ "root_path": reverse('admin:index'),
+ "app_label": app_label,
+ "action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
+ })
+
+ # Display the rename format selection page
+ return TemplateResponse(request, "admin/filer/folder/choose_rename_format.html", context)
+
+ rename_files.short_description = _("Rename files")
+
+ def _generate_new_filename(self, filename, suffix):
+ basename, extension = os.path.splitext(filename)
+ return basename + suffix + extension
def _copy_file(self, file_obj, destination, suffix, overwrite):
if overwrite:
- # Not yet implemented as we have to find a portable
- # (for different storage backends) way to overwrite files
+ # Not yet implemented as we have to find a portable (for different storage backends) way to overwrite files
raise NotImplementedError
- # We are assuming here that we are operating on an already saved
- # database objects with current database state available
+ # We are assuming here that we are operating on an already saved database objects with current database state available
+
+ filename = self._generate_new_filename(file_obj.file.name, suffix)
# Due to how inheritance works, we have to set both pk and id to None
file_obj.pk = None
file_obj.id = None
- file_obj.restricted = False
+ file_obj.save()
file_obj.folder = destination
- # add suffix to actual name
- if file_obj.name in ('', None):
- file_obj.original_filename = self._generate_name(
- file_obj.original_filename, suffix)
- else:
- file_obj.name = self._generate_name(file_obj.name, suffix)
- new_path = file_obj.file.field.upload_to(file_obj, file_obj.actual_name)
- file_obj.file = file_obj._copy_file(new_path)
+ file_obj._file_data_changed_hint = False # no need to update size, sha1, etc.
+ file_obj.file = file_obj._copy_file(filename)
+ file_obj.original_filename = self._generate_new_filename(file_obj.original_filename, suffix)
file_obj.save()
def _copy_files(self, files, destination, suffix, overwrite):
@@ -1024,331 +1100,161 @@ def _copy_files(self, files, destination, suffix, overwrite):
self._copy_file(f, destination, suffix, overwrite)
return len(files)
+ def _get_available_name(self, destination, name):
+ count = itertools.count(1)
+ original = name
+ while destination.contains_folder(name):
+ name = f"{original}_{next(count)}"
+ return name
+
def _copy_folder(self, folder, destination, suffix, overwrite):
if overwrite:
- # Not yet implemented as we have to find a portable
- # (for different storage backends) way to overwrite files
+ # Not yet implemented as we have to find a portable (for different storage backends) way to overwrite files
raise NotImplementedError
- foldername = self._generate_name(folder.name, suffix)
+ # TODO: Should we also allow not to overwrite the folder if it exists, but just copy into it?
+
+ # TODO: Is this a race-condition? Would this be a problem?
+ foldername = self._get_available_name(destination, folder.name)
+
old_folder = Folder.objects.get(pk=folder.pk)
- # Due to how inheritance works, we have to set both pk and id to None
- # lft and rght need to be reset since otherwise will see this node
- # as 'already set up for insertion' and will not recalculate tree
- # values
- folder.pk = folder.id = folder.lft = folder.rght = None
- folder.restricted = False
- folder.name = foldername
- folder.parent = destination
- folder.save()
-
- return 1 + self._copy_files_and_folders_impl(
- old_folder.files.all(), old_folder.children.all(),
- folder, suffix, overwrite)
-
- def _copy_files_and_folders_impl(self, files_queryset, folders_queryset,
- destination, suffix, overwrite):
+ folder, _ = Folder.objects.get_or_create(
+ name=foldername,
+ owner=old_folder.owner,
+ parent=destination,
+ )
+
+ for perm in FolderPermission.objects.filter(folder=old_folder):
+ perm.pk = None
+ perm.id = None
+ perm.folder = folder
+ perm.save()
+ return 1 + self._copy_files_and_folders_impl(old_folder.files.all(), old_folder.children.all(), folder, suffix, overwrite)
+
+ def _copy_files_and_folders_impl(self, files_queryset, folders_queryset, destination, suffix, overwrite):
n = self._copy_files(files_queryset, destination, suffix, overwrite)
- for f_id in folders_queryset.values_list('id', flat=True):
- f = Folder.objects.get(id=f_id)
- destination = Folder.objects.get(id=destination.id)
+ for f in folders_queryset:
n += self._copy_folder(f, destination, suffix, overwrite)
return n
- def _generate_name(self, filename, suffix):
- if not suffix:
- return filename
- basename, extension = os.path.splitext(filename)
- return basename + suffix + extension
-
- def _are_candidate_names_valid(
- self, request, file_qs, folder_qs, destination, suffix=None):
- candidate_folder_names = [self._generate_name(name, suffix)
- for name in folder_qs.values_list(
- 'name', flat=True)]
- candidate_file_names = [
- self._generate_name(file_obj.actual_name, suffix)
- for file_obj in file_qs]
-
- existing_names = [f.actual_name
- for f in destination.entries_with_names(
- candidate_folder_names + candidate_file_names)]
-
- if existing_names:
- messages.error(request,
- _("File or folders with names %s already exist at the "
- "selected destination") % ", ".join(existing_names))
- return False
- return True
-
- def copy_files_and_folders(self, request,
- files_queryset, folders_queryset):
+ def copy_files_and_folders(self, request, files_queryset, folders_queryset):
opts = self.model._meta
app_label = opts.app_label
- current_folder = self._get_current_action_folder(
- request, files_queryset, folders_queryset)
- to_copy = self._list_all_to_copy_or_move(
- request, files_queryset, folders_queryset)
+ current_folder = self._get_current_action_folder(request, files_queryset, folders_queryset)
+ perms_needed = self._check_copy_perms(request, files_queryset, folders_queryset)
+ to_copy = self._list_all_to_copy_or_move(request, files_queryset, folders_queryset)
+ folders = self._list_all_destination_folders(request, folders_queryset, current_folder, False)
if request.method == 'POST' and request.POST.get('post'):
+ if perms_needed:
+ raise PermissionDenied
form = CopyFilesAndFoldersForm(request.POST)
if form.is_valid():
try:
- destination = self._clean_destination(
- request, current_folder, folders_queryset)
- except PermissionDenied:
- messages.error(request,
- _("The selected destination was not valid, so the selected "\
- "files and folders were not copied. Please try again."))
- return None
-
- suffix = form.cleaned_data['suffix']
- if not self._are_candidate_names_valid(
- request, files_queryset, folders_queryset,
- destination, suffix): return
-
+ destination = self.get_queryset(request).get(pk=request.POST.get('destination'))
+ except self.model.DoesNotExist:
+ raise PermissionDenied
+ folders_dict = dict(folders)
+ if destination not in folders_dict or not folders_dict[destination][1]:
+ raise PermissionDenied
if files_queryset.count() + folders_queryset.count():
- # We count all files and folders here (recursivelly)
- n = self._copy_files_and_folders_impl(
- files_queryset, folders_queryset, destination,
- suffix, False)
- self.message_user(request,
- _("Successfully copied %(count)d files and/or "
- "folders to folder '%(destination)s'.") % {
- "count": n,
- "destination": destination,
- })
+ # We count all files and folders here (recursively)
+ n = self._copy_files_and_folders_impl(files_queryset, folders_queryset, destination, form.cleaned_data['suffix'], False)
+ self.message_user(request, _("Successfully copied %(count)d files and/or folders to folder '%(destination)s'.") % {
+ "count": n,
+ "destination": destination,
+ })
return None
else:
form = CopyFilesAndFoldersForm()
try:
- selected_destination_folder = \
- int(request.POST.get('destination', 0))
+ selected_destination_folder = int(request.POST.get('destination', 0))
except ValueError:
if current_folder:
selected_destination_folder = current_folder.pk
else:
selected_destination_folder = 0
- context = {
+
+ context = self.admin_site.each_context(request)
+ context.update({
"title": _("Copy files and/or folders"),
"instance": current_folder,
"breadcrumbs_action": _("Copy files and/or folders"),
"to_copy": to_copy,
+ "destination_folders": folders,
"selected_destination_folder": selected_destination_folder,
"copy_form": form,
"files_queryset": files_queryset,
"folders_queryset": folders_queryset,
+ "perms_lacking": perms_needed,
"opts": opts,
"root_path": reverse('admin:index'),
"app_label": app_label,
"action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
- }
- context.update(self.admin_site.each_context(request))
- # Display the destination folder selection page
- return render(request, "admin/filer/folder/choose_copy_destination.html", context)
-
- copy_files_and_folders.short_description = gettext_lazy(
- "Copy selected files and/or folders")
-
- def files_toggle_restriction(self, request, restriction,
- files_qs, folders_qs):
- """
- Action which enables or disables restriction for files/folders.
- """
- if request.method != 'POST':
- return None
- # cannot restrict/unrestrict unfiled files
- unfiled_files = files_qs.filter(folder__isnull=True)
- if unfiled_files.exists():
- messages.warning(request, _("Some of the selected files do not have parents: %s, "
- "so their rights cannot be changed.") %
- ', '.join([str(unfiled_file) for unfiled_file in unfiled_files.all()]))
- return None
-
- if not has_multi_file_action_permission(request, files_qs, folders_qs):
- messages.warning(request, _("You are not allowed to modify the restrictions on "\
- "the selected files and folders."))
- return None
-
- count = [0]
-
- def set_files_or_folders(filer_obj):
- for f in filer_obj:
- if f.restricted != restriction:
- f.restricted = restriction
- f.save()
- count[0] += 1
-
- set_files_or_folders(files_qs)
- set_files_or_folders(folders_qs)
- count = count[0]
- if restriction:
- self.message_user(request,
- _("Successfully enabled restriction for %(count)d files "
- "and/or folders.") % {"count": count,})
- else:
- self.message_user(request,
- _("Successfully disabled restriction for %(count)d files "
- "and/or folders.") % {"count": count,})
-
- return None
-
- def enable_restriction(self, request, files_qs, folders_qs):
- return self.files_toggle_restriction(
- request, True, files_qs, folders_qs)
-
- enable_restriction.short_description = gettext_lazy(
- "Enable restriction for selected and/or folders")
-
- def disable_restriction(self, request, files_qs, folders_qs):
- return self.files_toggle_restriction(
- request, False, files_qs, folders_qs)
-
- disable_restriction.short_description = gettext_lazy(
- "Disable restriction for selected and/or folders")
-
-'''
- def _rename_file(self, file_obj, form_data, counter, global_counter):
- original_basename, original_extension = os.path.splitext(
- file_obj.original_filename)
- if file_obj.name:
- current_basename, current_extension = os.path.splitext(
- file_obj.name)
- else:
- current_basename = ""
- current_extension = ""
- file_obj.name = form_data['rename_format'] % {
- 'original_filename': file_obj.original_filename,
- 'original_basename': original_basename,
- 'original_extension': original_extension,
- 'current_filename': file_obj.name or "",
- 'current_basename': current_basename,
- 'current_extension': current_extension,
- 'current_folder': file_obj.folder.name,
- 'counter': counter + 1, # 1-based
- 'global_counter': global_counter + 1, # 1-based
- }
- file_obj.save()
-
- def _rename_files(self, files, form_data, global_counter):
- n = 0
- for f in sorted(files):
- self._rename_file(f, form_data, n, global_counter + n)
- n += 1
- return n
-
- def _rename_folder(self, folder, form_data, global_counter):
- return self._rename_files_impl(
- folder.files.all(), folder.children.all(),
- form_data, global_counter)
-
- def _rename_files_impl(self, files_queryset, folders_queryset,
- form_data, global_counter):
- n = 0
-
- for f in folders_queryset:
- n += self._rename_folder(f, form_data, global_counter + n)
-
- n += self._rename_files(files_queryset, form_data, global_counter + n)
-
- return n
-
- def rename_files(self, request, files_queryset, folders_queryset):
- # this logic needs to be suplimented with folder type permission layer
- opts = self.model._meta
- app_label = opts.app_label
-
- current_folder = self._get_current_action_folder(
- request, files_queryset, folders_queryset)
- to_rename = self._list_all_to_copy_or_move(
- request, files_queryset, folders_queryset)
-
- if request.method == 'POST' and request.POST.get('post'):
- form = RenameFilesForm(request.POST)
- if form.is_valid():
- if files_queryset.count() + folders_queryset.count():
- n = self._rename_files_impl(
- files_queryset, folders_queryset,
- form.cleaned_data, 0)
- self.message_user(request,
- _("Successfully renamed %(count)d files.") % {
- "count": n,
- })
- return None
- else:
- form = RenameFilesForm()
+ })
- context = {
- "title": _("Rename files"),
- "instance": current_folder,
- "breadcrumbs_action": _("Rename files"),
- "to_rename": to_rename,
- "rename_form": form,
- "files_queryset": files_queryset,
- "folders_queryset": folders_queryset,
- "opts": opts,
- "root_path": reverse('admin:index'),
- "app_label": app_label,
- "action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
- }
+ # Display the destination folder selection page
+ return TemplateResponse(request, "admin/filer/folder/choose_copy_destination.html", context)
- # Display the rename format selection page
- return render(request, "admin/filer/folder/choose_rename_format.html", context=context)
+ copy_files_and_folders.short_description = _("Copy selected files and/or folders")
- rename_files.short_description = gettext_lazy("Rename files")
+ def _check_resize_perms(self, request, files_queryset, folders_queryset):
+ try:
+ check_files_read_permissions(request, files_queryset)
+ check_folder_read_permissions(request, folders_queryset)
+ check_files_edit_permissions(request, files_queryset)
+ except PermissionDenied:
+ return True
+ return False
def _list_folders_to_resize(self, request, folders):
for fo in folders:
- children = list(self._list_folders_to_resize(
- request, fo.children.all()))
- children.extend([self._format_callback(
- f, request.user, self.admin_site, set())
- for f in sorted(fo.files)
- if isinstance(f, Image)])
+ children = list(self._list_folders_to_resize(request, fo.children.all()))
+ children.extend([self._format_callback(f, request.user, self.admin_site, set()) for f in sorted(fo.files) if isinstance(f, Image)])
if children:
- yield self._format_callback(
- fo, request.user, self.admin_site, set())
+ yield self._format_callback(fo, request.user, self.admin_site, set())
yield children
def _list_all_to_resize(self, request, files_queryset, folders_queryset):
- to_resize = list(self._list_folders_to_resize(
- request, folders_queryset))
- to_resize.extend([self._format_callback(
- f, request.user, self.admin_site, set())
- for f in sorted(files_queryset)
- if isinstance(f, Image)])
+ to_resize = list(self._list_folders_to_resize(request, folders_queryset))
+ to_resize.extend([self._format_callback(f, request.user, self.admin_site, set()) for f in sorted(files_queryset) if isinstance(f, Image)])
return to_resize
- def _new_subject_location(self, original_width, original_height,
- new_width, new_height, x, y, crop):
- # TODO: We could probably do better
- return (round(new_width / 2), round(new_height / 2))
+ def _new_subject_location(self, original_width, original_height, new_width, new_height, x, y, crop):
+ # TODO: We could probably do even better, but this method knows nothing
+ # about actual thumbnailing algorithm details.
+ # It's better to reset subject location to the central point of the new
+ # image if the image is being cropped. The originally specified subject
+ # location could be outside of the new image.
+ if crop:
+ return int(new_width / 2), int(new_height / 2)
+ else:
+ # Calculate scaling factor of the new image compared to old.
+ scale = min(new_width / original_width, new_height / original_height)
+ return int(scale * x), int(scale * y)
def _resize_image(self, image, form_data):
original_width = float(image.width)
original_height = float(image.height)
- thumbnailer = FilerActionThumbnailer(
- file=image.file.file,
- name=image.file.name,
- source_storage=image.file.source_storage,
- thumbnail_storage=image.file.source_storage)
+ thumbnailer = FilerActionThumbnailer(file=image.file, name=image.file.name, source_storage=image.file.source_storage, thumbnail_storage=image.file.source_storage)
# This should overwrite the original image
new_image = thumbnailer.get_thumbnail({
- 'size': (form_data['width'], form_data['height']),
+ 'size': tuple(int(form_data[d] or 0) for d in ('width', 'height')),
'crop': form_data['crop'],
'upscale': form_data['upscale'],
'subject_location': image.subject_location,
})
- from django.db.models.fields.files import ImageFieldFile
image.file.file = new_image.file
- image.generate_sha1()
- image.save() # Also gets new width and height
+ # Since only file data was changed, there is no way for file field to know about the change.
+ # To update size, sha1, width and height fields let's call file_data_changed callback directly.
+ image.file_data_changed()
+ image.save()
subject_location = normalize_subject_location(image.subject_location)
if subject_location:
@@ -1357,9 +1263,7 @@ def _resize_image(self, image, form_data):
y = float(y)
new_width = float(image.width)
new_height = float(image.height)
- (new_x, new_y) = self._new_subject_location(
- original_width, original_height, new_width, new_height,
- x, y, form_data['crop'])
+ (new_x, new_y) = self._new_subject_location(original_width, original_height, new_width, new_height, x, y, form_data['crop'])
image.subject_location = "%d,%d" % (new_x, new_y)
image.save()
@@ -1372,11 +1276,9 @@ def _resize_images(self, files, form_data):
return n
def _resize_folder(self, folder, form_data):
- return self._resize_images_impl(
- folder.files.all(), folder.children.all(), form_data)
+ return self._resize_images_impl(folder.files.all(), folder.children.all(), form_data)
- def _resize_images_impl(self, files_queryset,
- folders_queryset, form_data):
+ def _resize_images_impl(self, files_queryset, folders_queryset, form_data):
n = self._resize_images(files_queryset, form_data)
for f in folders_queryset:
@@ -1388,115 +1290,45 @@ def resize_images(self, request, files_queryset, folders_queryset):
opts = self.model._meta
app_label = opts.app_label
- current_folder = self._get_current_action_folder(
- request, files_queryset, folders_queryset)
- to_resize = self._list_all_to_resize(
- request, files_queryset, folders_queryset)
+ current_folder = self._get_current_action_folder(request, files_queryset, folders_queryset)
+ perms_needed = self._check_resize_perms(request, files_queryset, folders_queryset)
+ to_resize = self._list_all_to_resize(request, files_queryset, folders_queryset)
if request.method == 'POST' and request.POST.get('post'):
+ if perms_needed:
+ raise PermissionDenied
form = ResizeImagesForm(request.POST)
if form.is_valid():
if form.cleaned_data.get('thumbnail_option'):
- form.cleaned_data['width'] = \
- form.cleaned_data['thumbnail_option'].width
- form.cleaned_data['height'] = \
- form.cleaned_data['thumbnail_option'].height
- form.cleaned_data['crop'] = \
- form.cleaned_data['thumbnail_option'].crop
- form.cleaned_data['upscale'] = \
- form.cleaned_data['thumbnail_option'].upscale
+ form.cleaned_data['width'] = form.cleaned_data['thumbnail_option'].width
+ form.cleaned_data['height'] = form.cleaned_data['thumbnail_option'].height
+ form.cleaned_data['crop'] = form.cleaned_data['thumbnail_option'].crop
+ form.cleaned_data['upscale'] = form.cleaned_data['thumbnail_option'].upscale
if files_queryset.count() + folders_queryset.count():
- # We count all files here (recursivelly)
- n = self._resize_images_impl(
- files_queryset, folders_queryset, form.cleaned_data)
- self.message_user(request,
- _("Successfully resized %(count)d images.") % {
- "count": n,
- })
+ # We count all files here (recursively)
+ n = self._resize_images_impl(files_queryset, folders_queryset, form.cleaned_data)
+ self.message_user(request, _("Successfully resized %(count)d images.") % {"count": n, })
return None
else:
form = ResizeImagesForm()
- context = {
+ context = self.admin_site.each_context(request)
+ context.update({
"title": _("Resize images"),
"instance": current_folder,
"breadcrumbs_action": _("Resize images"),
"to_resize": to_resize,
"resize_form": form,
- "cmsplugin_enabled": ('cmsplugin_filer_image'
- in django_settings.INSTALLED_APPS),
"files_queryset": files_queryset,
"folders_queryset": folders_queryset,
+ "perms_lacking": perms_needed,
"opts": opts,
"root_path": reverse('admin:index'),
"app_label": app_label,
"action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
- }
+ })
# Display the resize options page
- return render(
- request,
- "admin/filer/folder/choose_images_resize_options.html",
- context=context,
- )
-
- resize_images.short_description = gettext_lazy("Resize selected images")
-
- def files_set_public_or_private(self, request, set_public,
- files_queryset, folders_queryset):
- """
- Action which enables or disables permissions for selected
- files and files in selected folders to clipboard
- (set them private or public).
- """
-
- if not self.has_change_permission(request):
- raise PermissionDenied
-
- if request.method != 'POST':
- return None
-
- # We define it like that so that we can modify it inside the
- # set_files function
- files_count = [0]
-
- def set_files(files):
- for f in files:
- if f.is_public != set_public:
- f.is_public = set_public
- f.save()
- files_count[0] += 1
-
- def set_folders(folders):
- for f in folders:
- set_files(f.files)
- set_folders(f.children.all())
-
- set_files(files_queryset)
- set_folders(folders_queryset)
-
- if set_public:
- self.message_user(request,
- _("Successfully disabled permissions for %(count)d files.") % {
- "count": files_count[0], })
- else:
- self.message_user(request,
- _("Successfully enabled permissions for %(count)d files.") % {
- "count": files_count[0], })
-
- return None
-
- def files_set_private(self, request, files_queryset, folders_queryset):
- return self.files_set_public_or_private(
- request, False, files_queryset, folders_queryset)
-
- files_set_private.short_description = gettext_lazy(
- "Enable permissions for selected files")
-
- def files_set_public(self, request, files_queryset, folders_queryset):
- return self.files_set_public_or_private(
- request, True, files_queryset, folders_queryset)
+ return TemplateResponse(request, "admin/filer/folder/choose_images_resize_options.html", context)
- files_set_public.short_description = gettext_lazy(
- "Disable permissions for selected files")
-'''
+ resize_images.short_description = _("Resize selected images")
diff --git a/filer/admin/forms.py b/filer/admin/forms.py
index 52925c0d9..1a35e4125 100644
--- a/filer/admin/forms.py
+++ b/filer/admin/forms.py
@@ -1,40 +1,38 @@
from django import forms
-from django.db import models
from django.contrib.admin import widgets
-from filer.utils.files import get_valid_filename
-from django.utils.translation import gettext as _
+from django.contrib.admin.helpers import AdminForm
from django.core.exceptions import ValidationError
-from django.conf import settings
+from django.db import models
+from django.utils.translation import gettext as _
+from ..models import ThumbnailOption
+from ..utils.files import get_valid_filename
-if 'cmsplugin_filer_image' in settings.INSTALLED_APPS:
- from cmsplugin_filer_image.models import ThumbnailOption
+class WithFieldsetMixin:
+ def get_fieldsets(self):
+ return getattr(self, "fieldsets", [
+ (None, {"fields": [field for field in self.fields]})
+ ])
-class AsPWithHelpMixin(object):
- def as_p_with_help(self):
- "Returns this form rendered as HTML s with help text formated for admin."
- return self._html_output(
- normal_row='
%(label)s %(field)s
%(help_text)s',
- error_row='%s',
- row_ender='
',
- help_text_html='%s
',
- errors_on_separate_row=True)
+ def admin_form(self):
+ "Returns a class contains the Admin fieldset to show form as admin form"
+ return AdminForm(self, self.get_fieldsets(), {})
-class CopyFilesAndFoldersForm(forms.Form, AsPWithHelpMixin):
+class CopyFilesAndFoldersForm(forms.Form):
suffix = forms.CharField(required=False, help_text=_("Suffix which will be appended to filenames of copied files."))
# TODO: We have to find a way to overwrite files with different storage backends first.
- #overwrite_files = forms.BooleanField(required=False, help_text=_("Overwrite a file if there already exists a file with the same filename?"))
+ # overwrite_files = forms.BooleanField(required=False, help_text=_("Overwrite a file if there already exists a file with the same filename?"))
def clean_suffix(self):
- valid = get_valid_filename(self.cleaned_data['suffix'])
+ valid = get_valid_filename(self.cleaned_data['suffix']) if self.cleaned_data['suffix'] else ""
if valid != self.cleaned_data['suffix']:
raise forms.ValidationError(_('Suffix should be a valid, simple and lowercase filename part, like "%(valid)s".') % {'valid': valid})
return self.cleaned_data['suffix']
-class RenameFilesForm(forms.Form, AsPWithHelpMixin):
+class RenameFilesForm(WithFieldsetMixin, forms.Form):
rename_format = forms.CharField(required=True)
def clean_rename_format(self):
@@ -57,9 +55,20 @@ def clean_rename_format(self):
return self.cleaned_data['rename_format']
-class ResizeImagesForm(forms.Form, AsPWithHelpMixin):
- if 'cmsplugin_filer_image' in settings.INSTALLED_APPS:
- thumbnail_option = models.ForeignKey(ThumbnailOption, null=True, blank=True, verbose_name=_("thumbnail option")).formfield()
+class ResizeImagesForm(WithFieldsetMixin, forms.Form):
+ fieldsets = ((None, {"fields": (
+ "thumbnail_option",
+ ("width", "height"),
+ ("crop", "upscale"))}),)
+
+ thumbnail_option = models.ForeignKey(
+ ThumbnailOption,
+ null=True,
+ blank=True,
+ verbose_name=_("thumbnail option"),
+ on_delete=models.CASCADE,
+ ).formfield()
+
width = models.PositiveIntegerField(_("width"), null=True, blank=True).formfield(widget=widgets.AdminIntegerFieldWidget)
height = models.PositiveIntegerField(_("height"), null=True, blank=True).formfield(widget=widgets.AdminIntegerFieldWidget)
crop = models.BooleanField(_("crop"), default=True).formfield()
@@ -67,8 +76,5 @@ class ResizeImagesForm(forms.Form, AsPWithHelpMixin):
def clean(self):
if not (self.cleaned_data.get('thumbnail_option') or ((self.cleaned_data.get('width') or 0) + (self.cleaned_data.get('height') or 0))):
- if 'cmsplugin_filer_image' in settings.INSTALLED_APPS:
- raise ValidationError(_('Thumbnail option or resize parameters must be choosen.'))
- else:
- raise ValidationError(_('Resize parameters must be choosen.'))
+ raise ValidationError(_('Thumbnail option or resize parameters must be choosen.'))
return self.cleaned_data
diff --git a/filer/admin/imageadmin.py b/filer/admin/imageadmin.py
index 96fd494f3..aec3d41f9 100644
--- a/filer/admin/imageadmin.py
+++ b/filer/admin/imageadmin.py
@@ -1,63 +1,121 @@
-#-*- coding: utf-8 -*-
from django import forms
-from django.utils.translation import gettext as _
-from django.shortcuts import render
-from django.http import Http404
-from django.urls import re_path
-from filer.admin.fileadmin import FileAdmin
-from filer.models import Image
-from filer.views import (popup_status, selectfolder_status)
+from django.shortcuts import get_object_or_404
+from django.template.response import TemplateResponse
+from django.urls import path
+from django.utils.translation import gettext as _
+from django.utils.translation import gettext_lazy
+from ..settings import FILER_IMAGE_MODEL
+from ..thumbnail_processors import normalize_subject_location
+from ..utils.compatibility import string_concat
+from ..utils.loader import load_model
+from .fileadmin import FileAdmin, FileAdminChangeFrom
-class ImageAdminForm(forms.ModelForm):
+
+Image = load_model(FILER_IMAGE_MODEL)
+
+
+class ImageAdminForm(FileAdminChangeFrom):
subject_location = forms.CharField(
- max_length=64, required=False,
- label=_('Subject location'),
- help_text=_('Location of the main subject of the scene.'))
+ max_length=64, required=False,
+ label=_('Subject location'),
+ help_text=_('Location of the main subject of the scene. '
+ 'Format: "x,y".'))
def sidebar_image_ratio(self):
if self.instance:
# this is very important. It forces the value to be returned as a
- # string and always with a "." as seperator. If the conversion
+ # string and always with a "." as separator. If the conversion
# from float to string is done in the template, the locale will
# be used and in some cases there would be a "," instead of ".".
# javascript would parse that to an integer.
- return "%.6F" % self.instance.sidebar_image_ratio()
+ return '%.6F' % self.instance.sidebar_image_ratio()
else:
return ''
+ def _set_previous_subject_location(self, cleaned_data):
+ subject_location = self.instance.subject_location
+ cleaned_data['subject_location'] = subject_location
+ self.data = self.data.copy()
+ self.data['subject_location'] = subject_location
+
+ def clean_subject_location(self):
+ """
+ Validate subject_location preserving last saved value.
+
+ Last valid value of the subject_location field is shown to the user
+ for subject location widget to receive valid coordinates on field
+ validation errors.
+ """
+ subject_location = self.cleaned_data['subject_location']
+ if not subject_location:
+ # if supplied subject location is empty, do not check it
+ return subject_location
+
+ # use thumbnail's helper function to check the format
+ coordinates = normalize_subject_location(subject_location)
+
+ if not coordinates:
+ err_msg = gettext_lazy('Invalid subject location format. ')
+ err_code = 'invalid_subject_format'
+
+ elif (
+ coordinates[0] > self.instance.width > 0
+ or coordinates[1] > self.instance.height > 0
+ ):
+ err_msg = gettext_lazy(
+ 'Subject location is outside of the image. ')
+ err_code = 'subject_out_of_bounds'
+ else:
+ return subject_location
+
+ self._set_previous_subject_location(self.cleaned_data)
+ raise forms.ValidationError(
+ string_concat(
+ err_msg,
+ gettext_lazy('Your input: "{subject_location}". '.format(
+ subject_location=subject_location)),
+ 'Previous value is restored.'),
+ code=err_code)
+
class Meta:
model = Image
exclude = ()
class ImageAdmin(FileAdmin):
+ change_form_template = 'admin/filer/image/change_form.html'
form = ImageAdminForm
def get_urls(self):
- urls = super(ImageAdmin, self).get_urls()
- url_patterns = [
- re_path(r'^(?P\d+)/full_size_preview/$',
- self.admin_site.admin_view(self.full_size_preview),
- name='filer-image-preview'),
+ return super().get_urls() + [
+ path("expand/",
+ self.admin_site.admin_view(self.expand_view),
+ name=f"{self.opts.app_label}_{self.opts.model_name}_expand")
]
- url_patterns.extend(urls)
- return url_patterns
-
- def full_size_preview(self, request, file_id):
- try:
- image = Image.objects.get(id=file_id)
- except Image.DoesNotExist:
- raise Http404
-
- return render(request, 'admin/filer/image/full_size_preview.html', {
- 'image': image,
- 'current_site': request.GET.get('current_site', None),
- 'is_popup': popup_status(request),
- 'select_folder': selectfolder_status(request),
- })
+
+ def expand_view(self, request, file_id):
+ image = get_object_or_404(self.model, pk=file_id)
+ return TemplateResponse(
+ request,
+ "admin/filer/image/expand.html",
+ context={
+ "original_url": image.url
+ },
+ )
+
+
+if FILER_IMAGE_MODEL == 'filer.Image':
+ extra_main_fields = ('author', 'default_alt_text', 'default_caption',)
+else:
+ extra_main_fields = ('default_alt_text', 'default_caption',)
ImageAdmin.fieldsets = ImageAdmin.build_fieldsets(
- extra_main_fields=('default_alt_text', 'default_caption', 'default_credit'),
- extra_fieldsets=()
+ extra_main_fields=extra_main_fields,
+ extra_fieldsets=(
+ (_('Subject location'), {
+ 'fields': ('subject_location',),
+ 'classes': ('collapse',),
+ }),
+ )
)
diff --git a/filer/admin/patched/__init__.py b/filer/admin/patched/__init__.py
index 53f7f2286..e69de29bb 100644
--- a/filer/admin/patched/__init__.py
+++ b/filer/admin/patched/__init__.py
@@ -1,2 +0,0 @@
-#-*- coding: utf-8 -*-
-
diff --git a/filer/admin/patched/admin_utils.py b/filer/admin/patched/admin_utils.py
index ec986f68a..84602d5e5 100644
--- a/filer/admin/patched/admin_utils.py
+++ b/filer/admin/patched/admin_utils.py
@@ -1,31 +1,34 @@
-# -*- coding: utf-8 -*-
"""
Copy of ``django.contrib.admin.utils.get_deleted_objects`` and a subclass of
-``django.contrib.admin.utils.NestedObjects`` that work with djongo_polymorphic querysets.
-Ultimatly these should go directly into django_polymorphic or, in a more generic way, into django itself.
+``django.contrib.admin.utils.NestedObjects`` that work with django-polymorphic
+querysets.
+Ultimately these should go directly into django-polymorphic or, in a more
+generic way, into Django itself.
-This code has been copied from
-django 1.4. ``get_deleted_objects`` and ``NestedObjects`` have not changed compared to 1.3.1.
+This code has been copied from Django 1.9.4.
-At all locations where something has been changed, there are inline comments in the code.
+At all locations where something has been changed, there are inline comments
+in the code.
"""
-from django.contrib.admin.utils import NestedObjects, quote
+from collections import defaultdict
+
+from django import VERSION as DJANGO_VERSION
+from django.contrib.admin.utils import quote
from django.contrib.auth import get_permission_codename
-from django.utils.text import capfirst
-from django.utils.html import format_html
+from django.db import models
+from django.db.models.deletion import Collector
from django.urls import NoReverseMatch, reverse
from django.utils.encoding import force_str
-
+from django.utils.html import format_html
+from django.utils.text import capfirst
def get_deleted_objects(objs, opts, user, admin_site, using):
"""
Find all objects related to ``objs`` that should also be deleted. ``objs``
- must be a homogenous iterable of objects (e.g. a QuerySet).
-
+ must be a homogeneous iterable of objects (e.g. a QuerySet).
Returns a nested list of strings suitable for display in the
template with the ``unordered_list`` filter.
-
"""
# --- begin patch ---
collector = PolymorphicAwareNestedObjects(using=using)
@@ -53,8 +56,7 @@ def format_callback(obj):
p = '%s.%s' % (opts.app_label,
get_permission_codename('delete', opts))
- # Additional change: also check for individual object permission
- if not user.has_perm(p, obj) and not user.has_perm(p):
+ if not user.has_perm(p):
perms_needed.add(opts.verbose_name)
# Display a link to the admin page.
return format_html('{}: {} ',
@@ -69,11 +71,45 @@ def format_callback(obj):
to_delete = collector.nested(format_callback)
protected = [format_callback(obj) for obj in collector.protected]
+ model_count = {model._meta.verbose_name_plural: len(objs) for model, objs in collector.model_objs.items()}
- return to_delete, perms_needed, protected
+ return to_delete, model_count, perms_needed, protected
-class PolymorphicAwareNestedObjects(NestedObjects):
+class NestedObjects(Collector):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.edges = {} # {from_instance: [to_instances]}
+ self.protected = set()
+ self.model_objs = defaultdict(set)
+
+ def add_edge(self, source, target):
+ self.edges.setdefault(source, []).append(target)
+
+ def collect(self, objs, source=None, source_attr=None, **kwargs):
+ for obj in objs:
+ if source_attr and not source_attr.endswith('+'):
+ related_name = source_attr % {
+ 'class': source._meta.model_name,
+ 'app_label': source._meta.app_label,
+ }
+ self.add_edge(getattr(obj, related_name), obj)
+ else:
+ self.add_edge(None, obj)
+ self.model_objs[obj._meta.model].add(obj)
+ try:
+ return super().collect(objs, source_attr=source_attr, **kwargs)
+ except models.ProtectedError as e:
+ self.protected.update(e.protected_objects)
+
+ if DJANGO_VERSION >= (3, 1):
+ def related_objects(self, related_model, related_fields, objs):
+ qs = super().related_objects(related_model, related_fields, objs)
+ return qs.select_related(*[related.name for related in related_fields])
+ else:
+ def related_objects(self, related, objs):
+ qs = super().related_objects(related, objs)
+ return qs.select_related(related.field.name)
def _nested(self, obj, seen, format_callback):
if obj in seen:
@@ -82,21 +118,37 @@ def _nested(self, obj, seen, format_callback):
children = []
for child in self.edges.get(obj, ()):
children.extend(self._nested(child, seen, format_callback))
- if hasattr(obj, 'is_in_trash') and obj.is_in_trash():
- ret = []
+ if format_callback:
+ ret = [format_callback(obj)]
else:
- if format_callback:
- ret = [format_callback(obj)]
- else:
- ret = [obj]
+ ret = [obj]
if children:
ret.append(children)
return ret
+ def nested(self, format_callback=None):
+ """
+ Return the graph as a nested list.
+ """
+ seen = set()
+ roots = []
+ for root in self.edges.get(None, ()):
+ roots.extend(self._nested(root, seen, format_callback))
+ return roots
+
+ def can_fast_delete(self, *args, **kwargs):
+ """
+ We always want to load the objects into memory so that we can display
+ them to the user in confirm page.
+ """
+ return False
+
+
+class PolymorphicAwareNestedObjects(NestedObjects):
def collect(self, objs, source_attr=None, **kwargs):
if hasattr(objs, 'non_polymorphic'):
- # .filter() is needed, because there may already be
- # cached polymorphic results in the queryset
+ # .filter() is needed, because there may already be cached
+ # polymorphic results in the queryset
objs = objs.non_polymorphic().filter()
- return super(PolymorphicAwareNestedObjects, self).collect(
+ return super().collect(
objs, source_attr=source_attr, **kwargs)
diff --git a/filer/admin/permissionadmin.py b/filer/admin/permissionadmin.py
new file mode 100644
index 000000000..f3b03bd36
--- /dev/null
+++ b/filer/admin/permissionadmin.py
@@ -0,0 +1,56 @@
+from django import VERSION as django_version
+from django.contrib import admin
+from django.contrib.auth import get_user_model
+from django.utils.translation import gettext_lazy as _
+
+from .. import settings
+from ..cache import clear_folder_permission_cache
+
+
+class PermissionAdmin(admin.ModelAdmin):
+ fieldsets = [
+ (None, {'fields': ['type', 'folder']}),
+ (_("Who"), {'fields': ['user', 'group', 'everybody']}),
+ (_("What"), {'fields': ['can_edit', 'can_read', 'can_add_children']}),
+ ]
+ list_filter = ['group']
+ list_display = ['pretty_logical_path', 'who', 'what']
+ search_fields = ['user__username', 'group__name', 'folder__name']
+ autocomplete_fields = ['user', 'group', 'folder']
+
+ class Media:
+ css = {'all': ['filer/css/admin_folderpermissions.css']}
+
+ def get_autocomplete_fields(self, request):
+ """Remove "owner" from autocomplete_fields if User model has no search_fields"""
+
+ autocomplete_fields = super().get_autocomplete_fields(request)
+ if django_version >= (5, 0):
+ user_admin = self.admin_site.get_model_admin(get_user_model())
+ else:
+ user_admin = self.admin_site._registry[get_user_model()]
+ if not user_admin.get_search_fields(request):
+ autocomplete_fields.remove('user')
+ return autocomplete_fields
+
+ def get_queryset(self, request):
+ qs = super().get_queryset(request)
+ return qs.prefetch_related("group", "folder")
+
+ def get_model_perms(self, request):
+ # don't display the permissions admin if permissions are disabled.
+ # This method is easier for testing than not registering the admin at all at import time
+ enable_permissions = settings.FILER_ENABLE_PERMISSIONS and request.user.has_perm('filer.add_folderpermission')
+ return {
+ 'add': enable_permissions,
+ 'change': enable_permissions,
+ 'delete': enable_permissions,
+ }
+
+ def save_model(self, request, obj, form, change):
+ clear_folder_permission_cache(request.user)
+ super().save_model(request, obj, form, change)
+
+ def delete_model(self, request, obj):
+ clear_folder_permission_cache(request.user)
+ super().delete_model(request, obj)
diff --git a/filer/admin/permissions.py b/filer/admin/permissions.py
new file mode 100644
index 000000000..a747990bc
--- /dev/null
+++ b/filer/admin/permissions.py
@@ -0,0 +1,48 @@
+from django import VERSION as django_version
+from django.contrib import admin
+from django.contrib.auth import get_user_model
+from django.urls import reverse
+
+
+class PrimitivePermissionAwareModelAdmin(admin.ModelAdmin):
+ def get_autocomplete_fields(self, request):
+ """Remove "owner" from autocomplete_fields if User model has no search_fields"""
+
+ autocomplete_fields = super().get_autocomplete_fields(request)
+ if django_version >= (5, 0):
+ user_admin = self.admin_site.get_model_admin(get_user_model())
+ else:
+ user_admin = self.admin_site._registry[get_user_model()]
+ if not user_admin.get_search_fields(request) and 'owner' in autocomplete_fields:
+ autocomplete_fields.remove('owner')
+ return autocomplete_fields
+
+ def has_add_permission(self, request):
+ # we don't have a "add" permission... but all adding is handled
+ # by special methods that go around these permissions anyway
+ # TODO: reactivate return False
+ return False
+
+ def has_change_permission(self, request, obj=None):
+ if hasattr(obj, 'has_edit_permission'):
+ if obj.has_edit_permission(request):
+ return True
+ else:
+ return False
+ else:
+ return True
+
+ def has_delete_permission(self, request, obj=None):
+ # we don't have a specific delete permission... so we use change
+ return self.has_change_permission(request, obj)
+
+ def _get_post_url(self, obj):
+ """
+ Needed to retrieve the changelist url as Folder/File can be extended
+ and admin url may change
+ """
+ # Code from django ModelAdmin to determine changelist on the fly
+ opts = obj._meta
+ return reverse('admin:%s_%s_changelist' %
+ (opts.app_label, opts.model_name),
+ current_app=self.admin_site.name)
diff --git a/filer/admin/thumbnailoptionadmin.py b/filer/admin/thumbnailoptionadmin.py
new file mode 100644
index 000000000..9bdf5ff26
--- /dev/null
+++ b/filer/admin/thumbnailoptionadmin.py
@@ -0,0 +1,5 @@
+from django.contrib import admin
+
+
+class ThumbnailOptionAdmin(admin.ModelAdmin):
+ list_display = ('name', 'width', 'height')
diff --git a/filer/admin/tools.py b/filer/admin/tools.py
index 1995b905b..66a75dd8c 100644
--- a/filer/admin/tools.py
+++ b/filer/admin/tools.py
@@ -1,9 +1,128 @@
-#-*- coding: utf-8 -*-
-from django.conf import settings
+from django.conf import settings as django_settings
+from django.contrib.admin.options import IS_POPUP_VAR
+from django.core.exceptions import PermissionDenied
from django.db.models import Q
-from filer.utils.cms_roles import *
-from filer.models.foldermodels import Folder
+from django.utils.http import urlencode
+from .. import settings
+from ..utils.cms_roles import get_sites_for_user
+from ..models.foldermodels import Folder
+
+
+ALLOWED_PICK_TYPES = ('folder', 'file')
+
+
+def check_files_edit_permissions(request, files):
+ for f in files:
+ if not f.has_edit_permission(request):
+ raise PermissionDenied
+
+
+def check_folder_edit_permissions(request, folders):
+ for f in folders:
+ if not f.has_edit_permission(request):
+ raise PermissionDenied
+ check_files_edit_permissions(request, f.files)
+ check_folder_edit_permissions(request, f.children.all())
+
+
+def check_files_read_permissions(request, files):
+ for f in files:
+ if not f.has_read_permission(request):
+ raise PermissionDenied
+
+
+def check_folder_read_permissions(request, folders):
+ for f in folders:
+ if not f.has_read_permission(request):
+ raise PermissionDenied
+ check_files_read_permissions(request, f.files)
+ check_folder_read_permissions(request, f.children.all())
+
+
+def userperms_for_request(item, request):
+ r = []
+ ps = ['read', 'edit', 'add_children']
+ for p in ps:
+ attr = "has_%s_permission" % p
+ if hasattr(item, attr):
+ x = getattr(item, attr)(request)
+ if x:
+ r.append(p)
+ return r
+
+
+def popup_status(request):
+ return (
+ IS_POPUP_VAR in request.GET
+ or 'pop' in request.GET
+ or IS_POPUP_VAR in request.POST
+ or 'pop' in request.POST
+ )
+
+
+def popup_pick_type(request):
+ pick_type = request.GET.get('_pick', request.POST.get('_pick'))
+ if pick_type in ALLOWED_PICK_TYPES:
+ return pick_type
+ return None
+
+
+def edit_from_widget(request):
+ return request.GET.get('_edit_from_widget') == '1'
+
+
+def get_directory_listing_type(request):
+ list_type = request.GET.get('_list_type', None)
+ if list_type not in settings.FILER_FOLDER_ADMIN_LIST_TYPE_CHOICES:
+ return
+ return list_type
+
+
+def admin_url_params(request, params=None):
+ params = params or {}
+ if popup_status(request):
+ params[IS_POPUP_VAR] = '1'
+ pick_type = popup_pick_type(request)
+ if pick_type:
+ params['_pick'] = pick_type
+ if edit_from_widget(request):
+ params['_edit_from_widget'] = '1'
+ list_type = get_directory_listing_type(request)
+ if list_type and '_list_type' not in params.keys():
+ params['_list_type'] = list_type
+ return params
+
+
+def admin_url_params_encoded(request, first_separator='?', params=None):
+ params = urlencode(
+ sorted(admin_url_params(request, params=params).items())
+ )
+ if not params:
+ return ''
+ return f'{first_separator}{params}'
+
+
+class AdminContext(dict):
+ def __init__(self, request):
+ super().__init__()
+ self.update(admin_url_params(request))
+
+ def __missing__(self, key):
+ if key == 'popup':
+ return self.get(IS_POPUP_VAR, False) == '1'
+ elif key == 'pick':
+ return self.get('_pick', '')
+ elif key.startswith('pick_'):
+ return self.get('_pick', '') == key.split('pick_')[1]
+
+ def __getattr__(self, name):
+ if name in ('popup', 'pick') or name.startswith('pick_'):
+ return self.get(name)
+ raise AttributeError
+
+
+# --- PBS-specific functions ---
def is_valid_destination(request, folder):
user = request.user
@@ -33,73 +152,35 @@ def _filter_available_sites(current_site, user):
def folders_available(current_site, user, folders_qs):
"""
- Returns a queryset with folders that current user can see
- * core folders
- * shared folders
- * only site folders with sites available to the user
- * site admins can also see site folder files with no site assigned
-
- * current_site param is passed only with cms plugin change form so this
- will restrict visible files/folder for the ones that belong to that
- site for all users, even superusers
- """
- if user.is_superuser and not current_site:
- return folders_qs.distinct()
-
- available_sites = _filter_available_sites(current_site, user)
-
- sites_q = Q(Q(folder_type=Folder.CORE_FOLDER) |
- Q(site__in=available_sites) |
- Q(shared__in=available_sites))
-
- if (getattr(settings, 'FILER_INCLUDE_SITELESS_FOLDERS', True) and
- has_admin_role(user) and not current_site):
- sites_q |= Q(site__pk__isnull=True)
-
- return folders_qs.filter(sites_q).distinct()
-
-
-def files_available(current_site, user, files_qs):
- """
- Returns a queryset with files that current user can see:
- * core folder files
- * shared folder files
- * files from 'unfiled files'
- * only site folder files with sites available to the user
- * site admins can also see site folder files with no site assigned
-
- * current_site param is passed only with cms plugin change form so this
- will restrict visible files/folder for the ones that belong to that
- site for all users, even superusers
+ Returns a queryset with folders that current user can see.
"""
- # never show unfiled files from other users clipboard
- unfiled_in_clipboard = Q(Q(folder__isnull=True) &
- ~Q(clipboarditem__isnull=True))
-
- if user.is_superuser and not current_site:
- return files_qs.exclude(unfiled_in_clipboard).distinct()
-
available_sites = _filter_available_sites(current_site, user)
+ if not available_sites:
+ return folders_qs.none()
- sites_q = Q(Q(folder__folder_type=Folder.CORE_FOLDER) |
- Q(folder__site__in=available_sites) |
- Q(folder__shared__in=available_sites))
+ core_folders = Q(folder_type=Folder.CORE_FOLDER)
+ shared_folders = Q(shared__in=available_sites)
+ accessible_site_folders = Q(site__in=available_sites)
- if not current_site:
- sites_q |= Q(folder__isnull=True)
- if (getattr(settings, 'FILER_INCLUDE_SITELESS_FOLDERS', True) and
- has_admin_role(user)):
- sites_q |= Q(folder__site__isnull=True)
+ if user.is_superuser:
+ # superusers can also see folders with no site assigned
+ no_site_folders = Q(site__isnull=True) & ~core_folders
+ visible = (core_folders | shared_folders |
+ accessible_site_folders | no_site_folders)
else:
- # never show unfiled in popup
- sites_q &= Q(folder__isnull=False)
+ visible = core_folders | shared_folders | accessible_site_folders
- return files_qs.exclude(unfiled_in_clipboard).filter(sites_q).distinct()
+ return folders_qs.filter(visible).distinct()
def has_multi_file_action_permission(request, files, folders):
+ """PBS: Check permissions for multi-file actions (move/copy/delete)."""
+ from ..utils.cms_roles import (
+ has_admin_role,
+ get_admin_sites_for_user,
+ get_sites_for_user,
+ )
# unfiled files can be moved/deleted so better to just exclude them
- # from checking permissions for them
files = files.exclude(folder__isnull=True)
user = request.user
@@ -123,8 +204,6 @@ def has_multi_file_action_permission(request, files, folders):
if _exists_root_folders:
if not has_admin_role(user):
return False
- # allow site admins to move/delete root files/folders that belong
- # to the site where is admin
sites_allowed = [s.id for s in get_admin_sites_for_user(user)]
else:
sites_allowed = get_sites_for_user(user)
diff --git a/filer/admin/views.py b/filer/admin/views.py
new file mode 100644
index 000000000..542cff139
--- /dev/null
+++ b/filer/admin/views.py
@@ -0,0 +1,131 @@
+from django import forms
+from django.contrib import admin
+from django.contrib.admin import widgets
+from django.contrib.auth.decorators import login_required
+from django.core.exceptions import PermissionDenied
+from django.http import HttpResponseRedirect
+from django.http.response import HttpResponseBadRequest
+from django.template.response import TemplateResponse
+from django.utils.translation import gettext_lazy as _
+
+from .. import settings as filer_settings
+from ..models import Clipboard, Folder, FolderRoot, tools
+from .tools import AdminContext, admin_url_params_encoded, popup_status
+
+
+class NewFolderForm(forms.ModelForm):
+ class Meta:
+ model = Folder
+ fields = ('name',)
+ widgets = {
+ 'name': widgets.AdminTextInputWidget,
+ }
+
+
+@login_required
+def make_folder(request, folder_id=None):
+ if not folder_id:
+ folder_id = request.GET.get('parent_id')
+ if not folder_id:
+ folder_id = request.POST.get('parent_id')
+ if folder_id:
+ try:
+ folder = Folder.objects.get(id=folder_id)
+ except Folder.DoesNotExist:
+ raise PermissionDenied
+ else:
+ folder = None
+
+ if request.user.is_superuser:
+ pass
+ elif folder is None:
+ # regular users may not add root folders unless configured otherwise
+ if not filer_settings.FILER_ALLOW_REGULAR_USERS_TO_ADD_ROOT_FOLDERS:
+ raise PermissionDenied
+ elif not folder.has_add_children_permission(request):
+ # the user does not have the permission to add subfolders
+ raise PermissionDenied
+
+ if request.method == 'POST':
+ new_folder_form = NewFolderForm(request.POST)
+ if new_folder_form.is_valid():
+ new_folder = new_folder_form.save(commit=False)
+ if (folder or FolderRoot()).contains_folder(new_folder.name):
+ new_folder_form._errors['name'] = new_folder_form.error_class(
+ [_('Folder with this name already exists.')])
+ else:
+ context = admin.site.each_context(request)
+ new_folder.parent = folder
+ new_folder.owner = request.user
+ new_folder.save()
+ return TemplateResponse(request, 'admin/filer/dismiss_popup.html', context)
+ else:
+ new_folder_form = NewFolderForm()
+
+ context = admin.site.each_context(request)
+ context.update({
+ 'opts': Folder._meta,
+ 'new_folder_form': new_folder_form,
+ 'is_popup': popup_status(request),
+ 'filer_admin_context': AdminContext(request),
+ })
+ return TemplateResponse(request, 'admin/filer/folder/new_folder_form.html', context)
+
+
+@login_required
+def paste_clipboard_to_folder(request):
+ if True:
+ # TODO: cleanly remove Clipboard code if it is no longer needed
+ return HttpResponseBadRequest('not implemented anymore')
+
+ if request.method == 'POST':
+ folder = Folder.objects.get(id=request.POST.get('folder_id'))
+ clipboard = Clipboard.objects.get(id=request.POST.get('clipboard_id'))
+ if folder.has_add_children_permission(request):
+ tools.move_files_from_clipboard_to_folder(clipboard, folder)
+ tools.discard_clipboard(clipboard)
+ else:
+ raise PermissionDenied
+ redirect = request.GET.get('redirect_to', '')
+ if not redirect:
+ redirect = request.POST.get('redirect_to', '')
+ return HttpResponseRedirect(
+ '{}?order_by=-modified_at{}'.format(
+ redirect,
+ admin_url_params_encoded(request, first_separator='&'),
+ )
+ )
+
+
+@login_required
+def discard_clipboard(request):
+ if True:
+ # TODO: cleanly remove Clipboard code if it is no longer needed
+ return HttpResponseBadRequest('not implemented anymore')
+
+ if request.method == 'POST':
+ clipboard = Clipboard.objects.get(id=request.POST.get('clipboard_id'))
+ tools.discard_clipboard(clipboard)
+ return HttpResponseRedirect(
+ '{}{}'.format(
+ request.POST.get('redirect_to', ''),
+ admin_url_params_encoded(request, first_separator='&'),
+ )
+ )
+
+
+@login_required
+def delete_clipboard(request):
+ if True:
+ # TODO: cleanly remove Clipboard code if it is no longer needed
+ return HttpResponseBadRequest('not implemented anymore')
+
+ if request.method == 'POST':
+ clipboard = Clipboard.objects.get(id=request.POST.get('clipboard_id'))
+ tools.delete_clipboard(clipboard)
+ return HttpResponseRedirect(
+ '{}{}'.format(
+ request.POST.get('redirect_to', ''),
+ admin_url_params_encoded(request, first_separator='&'),
+ )
+ )
diff --git a/filer/apps.py b/filer/apps.py
index f92cd7939..ce0dc38a1 100644
--- a/filer/apps.py
+++ b/filer/apps.py
@@ -1,8 +1,69 @@
+import mimetypes
+
from django.apps import AppConfig
+from django.core.exceptions import ImproperlyConfigured
from django.utils.translation import gettext_lazy as _
+
from filer import __version__ as filer_version
class FilerConfig(AppConfig):
+ default_auto_field = 'django.db.models.AutoField'
name = 'filer'
verbose_name = _(f"Filer ({filer_version})")
+
+ def register_optional_heif_supprt(self):
+ try: # pragma: no cover
+ from pillow_heif import register_heif_opener
+
+ from .settings import IMAGE_EXTENSIONS, IMAGE_MIME_TYPES
+
+ # Register with easy_thumbnails
+ register_heif_opener()
+ HEIF_EXTENSIONS = [".heic", ".heics", ".heif", ".heifs", ".hif"]
+ # Add extensions to python mimetypes which filer uses
+ for ext in HEIF_EXTENSIONS:
+ mimetypes.add_type("image/heic", ext)
+ # Mark them as images
+ IMAGE_EXTENSIONS += HEIF_EXTENSIONS
+ IMAGE_MIME_TYPES.append("heic")
+ except (ModuleNotFoundError, ImportError):
+ # No heif support installed
+ pass
+
+ def resolve_validators(self):
+ """Resolve dotted path file validators"""
+
+ import importlib
+
+ from filer.settings import FILE_VALIDATORS, FILER_MIME_TYPE_WHITELIST
+
+ if (
+ not isinstance(FILER_MIME_TYPE_WHITELIST, (list, tuple)) or # noqa W504
+ any(map(lambda x: not isinstance(x, str), FILER_MIME_TYPE_WHITELIST))
+ ): # pragma: no cover
+ raise ImproperlyConfigured(
+ "filer: setting FILER_MIME_TYPE_WHITELIST needs to be a list or tuple of strings"
+ )
+ self.MIME_TYPE_WHITELIST = FILER_MIME_TYPE_WHITELIST
+ self.FILE_VALIDATORS = {}
+ for mime_type, validators in FILE_VALIDATORS.items():
+ functions = []
+ for item in validators:
+ if callable(item): # pragma: no cover
+ functions.append(item)
+ else:
+ split = item.rsplit(".", 1)
+ try:
+ module = importlib.import_module(split[0])
+ functions.append(getattr(module, split[-1]))
+ except (ImportError, ModuleNotFoundError, AttributeError):
+ raise ImproperlyConfigured(f"""filer: could not import validator "{item}".""")
+ self.FILE_VALIDATORS[mime_type] = functions
+
+ def ready(self):
+ # Make webp mime type known to python (needed for python < 3.11)
+ mimetypes.add_type("image/webp", ".webp")
+ #
+ self.resolve_validators()
+ self.register_optional_heif_supprt()
diff --git a/filer/cache.py b/filer/cache.py
new file mode 100644
index 000000000..d9861ac60
--- /dev/null
+++ b/filer/cache.py
@@ -0,0 +1,91 @@
+import typing
+
+from django.core.cache import cache
+from django.db.models import Model
+
+
+UserModel = typing.TypeVar('UserModel', bound=Model)
+
+
+def get_folder_perm_cache_key(user: UserModel, permission: str) -> str:
+ """
+ Generates a unique cache key for a given user and permission.
+
+ The key is a string in the format "filer:perm:", i.e. it does not
+ contain the user id. This will be sufficient for most use cases.
+
+ Patch this method to include the user id in the cache key if necessary, e.g.,
+ for far more than 1,000 admin users to make the cached unit require less memory.
+
+ Parameters:
+ user (UserModel): The user for whom the cache key is being generated.
+ The `user` can be an instance of the default `django.contrib.auth.models.User`
+ or any custom user model specified by `AUTH_USER_MODEL` in the settings.
+ permission (str): The permission for which the cache key is being generated.
+
+ Returns:
+ str: The generated cache key.
+ """
+ return f"filer:perm:{permission}"
+
+
+def get_folder_permission_cache(user: UserModel, permission: str) -> typing.Optional[typing.Set[int]]:
+ """
+ Retrieves the cached folder permissions for a given user and permission.
+
+ If the cache value exists, it returns the permissions for the user.
+ If the cache value does not exist, it returns None.
+
+ Parameters:
+ user (UserModel): The user for whom the permissions are being retrieved.
+ The `user` can be an instance of the default `django.contrib.auth.models.User`
+ or any custom user model specified by `AUTH_USER_MODEL` in the settings.
+ permission (str): The permission for which the permissions are being retrieved.
+
+ Returns:
+ set or None: The permissions for the user, or None if no cache value exists.
+ """
+ cache_value = cache.get(get_folder_perm_cache_key(user, permission))
+ if cache_value:
+ return cache_value.get(user.pk, None)
+ return None
+
+
+def clear_folder_permission_cache(user: UserModel, permission: typing.Optional[str] = None) -> None:
+ """
+ Clears the cached folder permissions for a given user.
+
+ If a specific permission is provided, it clears the cache for that permission only.
+ If no specific permission is provided, it clears the cache for all permissions.
+
+ Parameters:
+ user (UserModel): The user for whom the permissions are being cleared.
+ The `user` can be an instance of the default `django.contrib.auth.models.User`
+ or any custom user model specified by `AUTH_USER_MODEL` in the settings.
+ permission (str, optional): The specific permission to clear. Defaults to None.
+ """
+ if permission is None:
+ for perm in ['can_read', 'can_edit', 'can_add_children']:
+ cache.delete(get_folder_perm_cache_key(user, perm))
+ else:
+ cache.delete(get_folder_perm_cache_key(user, permission))
+
+
+def update_folder_permission_cache(user: UserModel, permission: str, id_list: typing.Set[int]) -> None:
+ """
+ Updates the cached folder permissions for a given user and permission.
+
+ It first retrieves the current permissions from the cache (or an empty dictionary if none exist).
+ Then it updates the permissions for the user with the provided list of IDs.
+ Finally, it sets the updated permissions back into the cache.
+
+ Parameters:
+ user (UserModel): The user for whom the permissions are being updated.
+ The `user` can be an instance of the default `django.contrib.auth.models.User`
+ or any custom user model specified by `AUTH_USER_MODEL` in the settings.
+ permission (str): The permission to update.
+ id_list (set): The set of IDs to set as the new permissions.
+ """
+ perms = cache.get(get_folder_perm_cache_key(user, permission)) or {}
+ perms[user.pk] = set(id_list)
+ cache.set(get_folder_perm_cache_key(user, permission), perms)
diff --git a/filer/contrib/__init__.py b/filer/contrib/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/filer/contrib/clamav/__init__.py b/filer/contrib/clamav/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/filer/contrib/django_cms/__init__.py b/filer/contrib/django_cms/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/filer/contrib/django_cms/cms_toolbars.py b/filer/contrib/django_cms/cms_toolbars.py
new file mode 100644
index 000000000..a42928dd2
--- /dev/null
+++ b/filer/contrib/django_cms/cms_toolbars.py
@@ -0,0 +1,51 @@
+from django.urls import reverse
+from django.utils.encoding import force_str
+from django.utils.translation import gettext_lazy as _
+
+from cms.cms_toolbars import ADMIN_MENU_IDENTIFIER, ADMINISTRATION_BREAK
+from cms.toolbar.items import Break
+from cms.toolbar_base import CMSToolbar
+from cms.toolbar_pool import toolbar_pool
+
+
+SHORTCUTS_BREAK = 'Shortcuts Break'
+
+
+@toolbar_pool.register
+class FilerToolbar(CMSToolbar):
+ """
+ Adds a Filer menu-item into django CMS's "ADMIN" (first) menu.
+ """
+ @staticmethod
+ def get_insert_position(admin_menu, item_name):
+ """
+ Ensures that there is a SHORTCUTS_BREAK and returns a position for an
+ alphabetical position against all items between SHORTCUTS_BREAK, and
+ the ADMINISTRATION_BREAK.
+ """
+ start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK)
+ if not start:
+ end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK)
+ admin_menu.add_break(SHORTCUTS_BREAK, position=end.index)
+ start = admin_menu.find_first(Break, identifier=SHORTCUTS_BREAK)
+ end = admin_menu.find_first(Break, identifier=ADMINISTRATION_BREAK)
+
+ items = admin_menu.get_items()[start.index + 1: end.index]
+ for idx, item in enumerate(items):
+ try:
+ if force_str(item_name.lower()) < force_str(item.name.lower()):
+ return idx + start.index + 1
+ except AttributeError:
+ # Some item types do not have a 'name' attribute.
+ pass
+ return end.index
+
+ def populate(self):
+ media_library = _('Media library')
+
+ admin_menu = self.toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER)
+ admin_menu.add_sideframe_item(
+ media_library,
+ url=reverse('admin:filer_folder_changelist'),
+ position=self.get_insert_position(admin_menu, media_library)
+ )
diff --git a/filer/fields/file.py b/filer/fields/file.py
index e43b56871..7fb4bf6b8 100644
--- a/filer/fields/file.py
+++ b/filer/fields/file.py
@@ -1,121 +1,101 @@
-#-*- coding: utf-8 -*-
+import logging
+import warnings
+
from django import forms
-from django.contrib.admin.widgets import ForeignKeyRawIdWidget
-from django.contrib.admin import widgets as django_widgets
from django.contrib.admin.sites import site
-from django.urls import reverse
+from django.contrib.admin.widgets import ForeignKeyRawIdWidget
+from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from django.template.loader import render_to_string
+from django.urls import reverse
+from django.utils.http import urlencode
from django.utils.safestring import mark_safe
-from filer.models import File
-from filer import settings as filer_settings
-from filer.utils.model_label import get_model_label
-try:
- from django.utils.text import truncate_words
-except ImportError:
- from django.template.defaultfilters import truncatewords as truncate_words
+from .. import settings as filer_settings
+from ..models import File
+from ..settings import ICON_CSS_LIB
+from ..utils.compatibility import truncate_words
+from ..utils.model_label import get_model_label
+
-import logging
logger = logging.getLogger(__name__)
+
class AdminFileWidget(ForeignKeyRawIdWidget):
choices = None
- def __init__(self, *args, **kwargs):
- super(AdminFileWidget, self).__init__(*args, **kwargs)
- self.set_defaults()
-
- def set_defaults(self):
- self.custom_preview_width = None
- self.search_label = None
- self.remove_label = None
-
- def render(self, name, value, attrs=None):
+ def render(self, name, value, attrs=None, renderer=None):
obj = self.obj_for_value(value)
- css_id = attrs.get('id', 'id_image_x')
- css_id_thumbnail_img = "%s_thumbnail_img" % css_id
- css_id_description_txt = "%s_description_txt" % css_id
- css_id_link_to_file = "%s_link_to_file" % css_id
+ css_id = attrs.get("id", "id_image_x")
related_url = None
+ change_url = ""
if value:
try:
file_obj = File.objects.get(pk=value)
- related_url = file_obj.logical_folder.\
- get_admin_directory_listing_url_path()
+ related_url = (
+ file_obj.logical_folder.get_admin_directory_listing_url_path()
+ )
+ change_url = file_obj.get_admin_change_url()
except Exception as e:
# catch exception and manage it. We can re-raise it for debugging
# purposes and/or just logging it, provided user configured
# proper logging configuration
if filer_settings.FILER_ENABLE_LOGGING:
- logger.error('Error while rendering file widget: %s',e)
+ logger.error("Error while rendering file widget: %s", e)
if filer_settings.FILER_DEBUG:
- raise e
+ raise
if not related_url:
- related_url = reverse('admin:filer-directory_listing-root')
+ related_url = reverse("admin:filer-directory_listing-last")
params = self.url_parameters()
+ params["_pick"] = "file"
if params:
- lookup_url = '?' + '&'.join(
- ['%s=%s' % (k, v) for k, v in list(params.items())])
+ lookup_url = "?" + urlencode(sorted(params.items()))
else:
- lookup_url = ''
- if not 'class' in attrs:
+ lookup_url = ""
+ # Filer image is never autocomplete widget; Django's popup js fails if it finds "data-context="available-source"
+ self.attrs.pop("data-context", None)
+ if "class" not in attrs:
# The JavaScript looks for this hook.
- attrs['class'] = 'vForeignKeyRawIdAdminField'
+ attrs["class"] = "vForeignKeyRawIdAdminField"
# rendering the super for ForeignKeyRawIdWidget on purpose here because
# we only need the input and none of the other stuff that
# ForeignKeyRawIdWidget adds
hidden_input = super(ForeignKeyRawIdWidget, self).render(
- name, value, attrs)
- filer_static_prefix = filer_settings.FILER_STATICMEDIA_PREFIX
- if not filer_static_prefix[-1] == '/':
- filer_static_prefix += '/'
+ name, value, attrs
+ ) # grandparent super
context = {
- 'hidden_input': hidden_input,
- 'lookup_url': '%s%s' % (related_url, lookup_url),
- 'thumb_id': css_id_thumbnail_img,
- 'span_id': css_id_description_txt,
- 'link_id': css_id_link_to_file,
- 'object': obj,
- 'lookup_name': name,
- 'filer_static_prefix': filer_static_prefix,
- 'clear_id': '%s_clear' % css_id,
- 'id': css_id,
- 'search_label': self.search_label,
- 'remove_label': self.remove_label,
+ "hidden_input": hidden_input,
+ "lookup_url": f"{related_url}{lookup_url}",
+ "change_url": change_url,
+ "object": obj,
+ "lookup_name": name,
+ "id": css_id,
+ "admin_icon_delete": ("admin/img/icon-deletelink.svg"),
}
-
- template = 'admin/filer/widgets/admin_file.html'
- if self.custom_preview_width:
- self.update_context_for_custom_preview(context, obj)
- template = 'admin/filer/widgets/admin_file_custom.html'
-
- html = render_to_string(template, context)
+ html = render_to_string("admin/filer/widgets/admin_file.html", context)
return mark_safe(html)
def label_for_value(self, value):
obj = self.obj_for_value(value)
- return ' %s ' % truncate_words(obj, 14)
+ return " %s " % truncate_words(obj, 14)
def obj_for_value(self, value):
- try:
- key = self.remote_field.get_related_field().name
- obj = self.remote_field.model.objects.get(**{key: value})
- except:
+ if value:
+ try:
+ # the next line may never bee reached
+ key = self.rel.get_related_field().name
+ obj = self.rel.model._default_manager.get(**{key: value})
+ except ObjectDoesNotExist:
+ obj = None
+ else:
obj = None
return obj
- def update_context_for_custom_preview(self, context, obj):
- context['custom_preview'] = True
- context['custom_preview_width'] = self.custom_preview_width
- context['custom_preview_image'] = self.get_custom_preview_image(obj=obj)
- return context
-
- def get_custom_preview_image(self, obj):
- return obj.icons['32'] if obj else None
-
class Media:
- js = (filer_settings.FILER_STATICMEDIA_PREFIX + 'js/popup_handling.js',)
+ css = {
+ "all": ("filer/css/admin_filer.css",) + ICON_CSS_LIB,
+ }
+ js = ("filer/js/dist/admin-file-widget.bundle.js",)
class AdminFileFormField(forms.ModelChoiceField):
@@ -127,8 +107,8 @@ def __init__(self, rel, queryset, to_field_name, *args, **kwargs):
self.to_field_name = to_field_name
self.max_value = None
self.min_value = None
- kwargs.pop('widget', None)
- super(AdminFileFormField, self).__init__(queryset, widget=self.widget(rel, site), *args, **kwargs)
+ kwargs.pop("widget", None)
+ super().__init__(queryset, widget=self.widget(rel, site), *args, **kwargs)
def widget_attrs(self, widget):
widget.required = self.required
@@ -139,28 +119,26 @@ class FilerFileField(models.ForeignKey):
default_form_class = AdminFileFormField
default_model_class = File
- def __init__(self, to=None, *args, **kwargs):
- kwargs['to'] = get_model_label(self.default_model_class)
- super(FilerFileField, self).__init__(*args, **kwargs)
+ def __init__(self, **kwargs):
+ to = kwargs.pop("to", None)
+ dfl = get_model_label(self.default_model_class)
+ if to and get_model_label(to).lower() != dfl.lower():
+ msg = "In {}: ForeignKey must point to {}; instead passed {}"
+ warnings.warn(msg.format(self.__class__.__name__, dfl, to), SyntaxWarning)
+ kwargs["to"] = dfl # hard-code `to` to model `filer.File`
+ super().__init__(**kwargs)
def formfield(self, **kwargs):
- # This is a fairly standard way to set up some defaults
- # while letting the caller override them.
defaults = {
- 'form_class': self.default_form_class,
- 'rel': self.remote_field,
+ "form_class": self.default_form_class,
+ "rel": self.remote_field,
}
defaults.update(kwargs)
- return super(FilerFileField, self).formfield(**defaults)
-
- def south_field_triple(self):
- "Returns a suitable description of this field for South."
- # We'll just introspect ourselves, since we inherit.
- from south.modelsinspector import introspector
- field_class = "django.db.models.fields.related.ForeignKey"
- args, kwargs = introspector(self)
- # That's our definition!
- return (field_class, args, kwargs)
+ return super().formfield(**defaults)
+
+
+# PBS-specific: widget that doesn't show clear checkbox
+from django.contrib.admin import widgets as django_widgets
class NonClearableFileInput(django_widgets.AdminFileWidget):
diff --git a/filer/fields/folder.py b/filer/fields/folder.py
index a1bf9f88a..5a6dc450a 100644
--- a/filer/fields/folder.py
+++ b/filer/fields/folder.py
@@ -1,35 +1,35 @@
-#-*- coding: utf-8 -*-
-from django.template.loader import render_to_string
+import warnings
from django import forms
-from django.contrib.admin.widgets import ForeignKeyRawIdWidget
from django.contrib.admin.sites import site
-from django.urls import reverse
+from django.contrib.admin.widgets import ForeignKeyRawIdWidget
+from django.core.exceptions import ObjectDoesNotExist
from django.db import models
+from django.template.loader import render_to_string
+from django.urls import reverse
+from django.utils.http import urlencode
from django.utils.safestring import mark_safe
-from filer.models import Folder
-from filer.settings import FILER_STATICMEDIA_PREFIX
-from filer.utils.model_label import get_model_label
-try:
- from django.utils.text import truncate_words
-except ImportError:
- from django.template.defaultfilters import truncatewords as truncate_words
+from ..models import Folder
+from ..settings import ICON_CSS_LIB
+from ..utils.compatibility import truncate_words
+from ..utils.model_label import get_model_label
class AdminFolderWidget(ForeignKeyRawIdWidget):
choices = None
+ input_type = "hidden"
+ is_hidden = False
-
- def render(self, name, value, attrs=None):
+ def render(self, name, value, attrs=None, renderer=None):
obj = self.obj_for_value(value)
- css_id = attrs.get('id')
+ css_id = attrs.get("id")
css_id_folder = "%s_folder" % css_id
css_id_description_txt = "%s_description_txt" % css_id
- required = self.attrs
if attrs is None:
attrs = {}
related_url = None
+
if value:
try:
folder = Folder.objects.get(pk=value)
@@ -37,52 +37,57 @@ def render(self, name, value, attrs=None):
except Exception:
pass
if not related_url:
- related_url = reverse('admin:filer-directory_listing-root')
+ related_url = reverse("admin:filer-directory_listing-last")
params = self.url_parameters()
- params['select_folder'] = 1
+ params["_pick"] = "folder"
if params:
- url = '?' + '&'.join(
- ['%s=%s' % (k, v) for k, v in list(params.items())])
+ url = "?" + urlencode(sorted(params.items()))
else:
- url = ''
- if not 'class' in attrs:
+ url = ""
+ if "class" not in attrs:
# The JavaScript looks for this hook.
- attrs['class'] = 'vForeignKeyRawIdAdminField'
+ attrs["class"] = "vForeignKeyRawIdAdminField"
super_attrs = attrs.copy()
hidden_input = super(ForeignKeyRawIdWidget, self).render(
- name, value, super_attrs)
+ name, value, super_attrs
+ ) # grandparent super
# TODO: "id_" is hard-coded here. This should instead use the correct
# API to determine the ID dynamically.
context = {
- 'hidden_input': hidden_input,
- 'lookup_url': '%s%s' % (related_url, url),
- 'lookup_name': name,
- 'span_id': css_id_description_txt,
- 'object': obj,
- 'clear_id': '%s_clear' % css_id,
- 'descid': css_id_description_txt,
- 'noimg': '%sicons/nofile_32x32.png' % FILER_STATICMEDIA_PREFIX,
- 'foldid': css_id_folder,
- 'id': css_id,
- }
- html = render_to_string('admin/filer/widgets/admin_folder.html', context)
+ "hidden_input": hidden_input,
+ "lookup_url": f"{related_url}{url}",
+ "lookup_name": name,
+ "span_id": css_id_description_txt,
+ "object": obj,
+ "clear_id": "%s_clear" % css_id,
+ "descid": css_id_description_txt,
+ "foldid": css_id_folder,
+ "id": css_id,
+ }
+ html = render_to_string("admin/filer/widgets/admin_folder.html", context)
return mark_safe(html)
def label_for_value(self, value):
obj = self.obj_for_value(value)
- return ' %s ' % truncate_words(obj, 14)
+ return " %s " % truncate_words(obj, 14)
def obj_for_value(self, value):
+ if not value:
+ return None
try:
- key = self.remote_field.get_related_field().name
- obj = self.remote_field.model.objects.get(**{key: value})
- except:
+ key = self.rel.get_related_field().name
+ obj = self.rel.model._default_manager.get(**{key: value})
+ except ObjectDoesNotExist:
obj = None
return obj
class Media:
- js = (FILER_STATICMEDIA_PREFIX + 'js/popup_handling.js',)
+ css = {"all": ("filer/css/admin_filer.css",) + ICON_CSS_LIB}
+ js = (
+ "filer/js/addons/popup_handling.js",
+ "filer/js/widgets/admin-folder-widget.js",
+ )
class AdminFolderFormField(forms.ModelChoiceField):
@@ -91,11 +96,13 @@ class AdminFolderFormField(forms.ModelChoiceField):
def __init__(self, rel, queryset, to_field_name, *args, **kwargs):
self.rel = rel
self.queryset = queryset
+ self.limit_choices_to = kwargs.pop("limit_choices_to", None)
self.to_field_name = to_field_name
self.max_value = None
self.min_value = None
- kwargs.pop('widget', None)
- super(AdminFolderFormField, self).__init__(queryset, widget=self.widget(rel, site), *args, **kwargs)
+ kwargs.pop("widget", None)
+ kwargs.pop("blank", None)
+ forms.Field.__init__(self, widget=self.widget(rel, site), *args, **kwargs)
def widget_attrs(self, widget):
widget.required = self.required
@@ -107,24 +114,22 @@ class FilerFolderField(models.ForeignKey):
default_model_class = Folder
def __init__(self, **kwargs):
- kwargs['to'] = get_model_label(self.default_model_class)
- super(FilerFolderField, self).__init__(**kwargs)
+ # We hard-code the `to` argument for ForeignKey.__init__
+ dfl = get_model_label(self.default_model_class)
+ if "to" in kwargs.keys(): # pragma: no cover
+ old_to = get_model_label(kwargs.pop("to"))
+ if old_to.lower() != dfl.lower():
+ msg = "{} can only be a ForeignKey to {}; {} passed".format(
+ self.__class__.__name__, dfl, old_to
+ )
+ warnings.warn(msg, SyntaxWarning)
+ kwargs["to"] = dfl
+ super().__init__(**kwargs)
def formfield(self, **kwargs):
- # This is a fairly standard way to set up some defaults
- # while letting the caller override them.
defaults = {
- 'form_class': self.default_form_class,
- 'rel': self.remote_field,
+ "form_class": self.default_form_class,
+ "rel": self.remote_field,
}
defaults.update(kwargs)
- return super(FilerFolderField, self).formfield(**defaults)
-
- def south_field_triple(self):
- "Returns a suitable description of this field for South."
- # We'll just introspect ourselves, since we inherit.
- from south.modelsinspector import introspector
- field_class = "django.db.models.fields.related.ForeignKey"
- args, kwargs = introspector(self)
- # That's our definition!
- return (field_class, args, kwargs)
+ return super().formfield(**defaults)
diff --git a/filer/fields/image.py b/filer/fields/image.py
index c9eabe90d..d1ff162bb 100644
--- a/filer/fields/image.py
+++ b/filer/fields/image.py
@@ -1,13 +1,9 @@
-#-*- coding: utf-8 -*-
-from filer.fields.file import AdminFileWidget, AdminFileFormField, \
- FilerFileField
-from filer.models import Image
+from .. import settings
+from .file import AdminFileFormField, AdminFileWidget, FilerFileField
class AdminImageWidget(AdminFileWidget):
-
- def get_custom_preview_image(self, obj):
- return obj.url if obj else None
+ pass
class AdminImageFormField(AdminFileFormField):
@@ -16,4 +12,4 @@ class AdminImageFormField(AdminFileFormField):
class FilerImageField(FilerFileField):
default_form_class = AdminImageFormField
- default_model_class = Image
+ default_model_class = settings.FILER_IMAGE_MODEL
diff --git a/filer/fields/multistorage_file.py b/filer/fields/multistorage_file.py
index 9be171cdf..99f730403 100644
--- a/filer/fields/multistorage_file.py
+++ b/filer/fields/multistorage_file.py
@@ -1,10 +1,16 @@
-#-*- coding: utf-8 -*-
-from easy_thumbnails import fields as easy_thumbnails_fields, \
- files as easy_thumbnails_files
+import base64
+import hashlib
+import warnings
+from io import BytesIO
-from filer import settings as filer_settings
-from filer.utils.filer_easy_thumbnails import ThumbnailerNameMixin
-from filer.utils.cdn import get_cdn_url
+from django.core.files.base import ContentFile
+from django.db.models.fields.files import FileDescriptor
+
+from easy_thumbnails import fields as easy_thumbnails_fields
+from easy_thumbnails import files as easy_thumbnails_files
+
+from .. import settings as filer_settings
+from ..utils.filer_easy_thumbnails import ThumbnailerNameMixin
STORAGES = {
@@ -33,18 +39,30 @@ def generate_filename_multistorage(instance, filename):
return upload_to
-class CdnAwareThumbnailFile(object):
-
- def __init__(self, thumbnail_file, filer_file):
- self._thumbnail_file = thumbnail_file
- self._filer_file = filer_file
-
- def __getattr__(self, attr_name):
- return getattr(self._thumbnail_file, attr_name)
-
- @property
- def url(self):
- return get_cdn_url(self._filer_file, self._thumbnail_file.url)
+class MultiStorageFileDescriptor(FileDescriptor):
+ """
+ This is rather similar to Django's ImageFileDescriptor.
+ It calls _data_changed on model instance when new
+ value is set. The callback is supposed to update fields which
+ are related to file data (like size, checksum, etc.).
+ When this is called from model __init__ (prev_assigned=False),
+ it does nothing because related fields might not have values yet.
+ In such case data_changed callback should be called at the end of model __init__
+ (File.__init__ in this case).
+ """
+ def __set__(self, instance, value):
+ prev_assigned = self.field.name in instance.__dict__
+ previous_file = instance.__dict__.get(self.field.name)
+ super().__set__(instance, value)
+
+ # To prevent recalculating file data related attributes when we are instantiating
+ # an object from the database, update only if the field had a value before this assignment.
+ # To prevent recalculating upon reassignment of the same file, update only if value is
+ # different from the previous one.
+ if prev_assigned and value != previous_file:
+ callback_attr = f'{self.field.name}_data_changed'
+ if hasattr(instance, callback_attr):
+ getattr(instance, callback_attr)()
class MultiStorageFieldFile(ThumbnailerNameMixin,
@@ -52,7 +70,7 @@ class MultiStorageFieldFile(ThumbnailerNameMixin,
def __init__(self, instance, field, name):
"""
This is a little weird, but I couldn't find a better solution.
- Thumbnailer.__init__ is called first for proper object inizialization.
+ Thumbnailer.__init__ is called first for proper object initialisation.
Then we override some attributes defined at runtime with properties.
We cannot simply call super().__init__ because filer Field objects
doesn't have a storage attribute.
@@ -97,41 +115,63 @@ def _thumbnail_base_dir(self):
else:
return self.thumbnail_options['private'].get('base_dir', '')
- def _get_url(self):
- if self.instance.is_in_trash():
- return ''
- url = super(MultiStorageFieldFile, self).url
- return get_cdn_url(self.instance, url)
- url = property(_get_url)
-
def save(self, name, content, save=True):
- content.seek(0) # Ensure we upload the whole file
- super(MultiStorageFieldFile, self).save(name, content, save)
-
- def get_thumbnail(self, opts, save=True, generate=None):
- if self.instance.is_in_trash():
- return None
- thumbnail = super(MultiStorageFieldFile, self).get_thumbnail(opts, save, generate)
- return CdnAwareThumbnailFile(thumbnail, self.instance)
+ content.seek(0) # Ensure we upload the whole file
+ super().save(name, content, save)
- def get_thumbnails(self, *args, **kwargs):
- if self.instance.is_in_trash():
- return []
- return super(MultiStorageFieldFile, self).get_thumbnails(
- *args, **kwargs)
+ def exists(self):
+ """
+ Returns ``True`` if underlying file exists in storage.
+ """
+ return self.name and self.storage.exists(self.name)
class MultiStorageFileField(easy_thumbnails_fields.ThumbnailerField):
attr_class = MultiStorageFieldFile
+ descriptor_class = MultiStorageFileDescriptor
def __init__(self, verbose_name=None, name=None,
storages=None, thumbnail_storages=None, thumbnail_options=None, **kwargs):
- # fix for makemigrations
- kwargs.pop("upload_to", None)
+ if 'upload_to' in kwargs: # pragma: no cover
+ upload_to = kwargs.pop("upload_to")
+ if upload_to != generate_filename_multistorage:
+ warnings.warn("MultiStorageFileField can handle only File objects;"
+ "%s passed" % upload_to, SyntaxWarning)
self.storages = storages or STORAGES
self.thumbnail_storages = thumbnail_storages or THUMBNAIL_STORAGES
self.thumbnail_options = thumbnail_options or THUMBNAIL_OPTIONS
super(easy_thumbnails_fields.ThumbnailerField, self).__init__(
- verbose_name=verbose_name, name=name,
- upload_to=generate_filename_multistorage,
- storage=None, **kwargs)
+ verbose_name=verbose_name, name=name,
+ upload_to=generate_filename_multistorage,
+ storage=None, **kwargs) # grandparent super
+
+ def value_to_string(self, obj):
+ value = super().value_to_string(obj)
+ if not filer_settings.FILER_DUMP_PAYLOAD:
+ return value
+ try:
+ payload_file = BytesIO(self.storage.open(value).read())
+ sha = hashlib.sha1()
+ sha.update(payload_file.read())
+ if sha.hexdigest() != obj.sha1:
+ warnings.warn('The checksum for "%s" diverges. Check for file consistency!' % obj.original_filename)
+ payload_file.seek(0)
+ encoded_string = base64.b64encode(payload_file.read()).decode('utf-8')
+ return value, encoded_string
+ except OSError:
+ warnings.warn(f'The payload for "{obj.original_filename}" is missing. No such file on disk: {self.storage.location}!')
+ return value
+
+ def to_python(self, value):
+ if isinstance(value, list) and len(value) == 2 and isinstance(value[0], str):
+ filename, payload = value
+ try:
+ payload = base64.b64decode(payload)
+ except TypeError:
+ pass
+ else:
+ if self.storage.exists(filename):
+ self.storage.delete(filename)
+ self.storage.save(filename, ContentFile(payload))
+ return filename
+ return value
diff --git a/filer/locale/ar/LC_MESSAGES/django.mo b/filer/locale/ar/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..ec06f66ea
Binary files /dev/null and b/filer/locale/ar/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/ar/LC_MESSAGES/django.po b/filer/locale/ar/LC_MESSAGES/django.po
new file mode 100644
index 000000000..5469f0334
--- /dev/null
+++ b/filer/locale/ar/LC_MESSAGES/django.po
@@ -0,0 +1,1245 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Arabic (http://app.transifex.com/divio/django-filer/language/"
+"ar/)\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+#~ msgstr[3] "15c0f2d28d6dab1af1f6d94906beb627_pl_3"
+#~ msgstr[4] "15c0f2d28d6dab1af1f6d94906beb627_pl_4"
+#~ msgstr[5] "15c0f2d28d6dab1af1f6d94906beb627_pl_5"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/bg/LC_MESSAGES/django.mo b/filer/locale/bg/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..24974f0a5
Binary files /dev/null and b/filer/locale/bg/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/bg/LC_MESSAGES/django.po b/filer/locale/bg/LC_MESSAGES/django.po
new file mode 100644
index 000000000..88b4a3899
--- /dev/null
+++ b/filer/locale/bg/LC_MESSAGES/django.po
@@ -0,0 +1,1224 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Bulgarian (http://app.transifex.com/divio/django-filer/"
+"language/bg/)\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/ca/LC_MESSAGES/django.mo b/filer/locale/ca/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..abddc6195
Binary files /dev/null and b/filer/locale/ca/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/ca/LC_MESSAGES/django.po b/filer/locale/ca/LC_MESSAGES/django.po
new file mode 100644
index 000000000..4ba43842f
--- /dev/null
+++ b/filer/locale/ca/LC_MESSAGES/django.po
@@ -0,0 +1,1261 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Roger Pons , 2013-2014,2016
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Roger Pons , 2013-2014,2016\n"
+"Language-Team: Catalan (http://app.transifex.com/divio/django-filer/language/"
+"ca/)\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Avançat"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "URL canònica"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Cal seleccionar els elements en ordre per tal de realitzar accions sobre "
+"ells. No s'ha modificat cap element."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s seleccionat"
+msgstr[1] "Tots %(total_count)s seleccionats"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 de %(cnt)s seleccionats"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "No s'ha seleccionat cap acció."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "S'han mogut %(count)d fitxers al portapapers."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Moure els fitxers seleccionats al portapapers."
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "S'han desactivat els permisos de %(count)d fitxers."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "S'han activat els permisos de %(count)d fitxers."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Activar els permisos dels fitxers seleccionats"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Desactivaer els permisos dels fitxers seleccionats"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "S'han esborrat %(count)d fitxers i/o carpetes."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "No es poden esborrar els fitxers i/o carpetes"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Esteu segur?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Esborrar fitxers i/o carpetes"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Esborrar els fitxers i/o carpetes seleccionats"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Ja existeixen carpetes amb els noms %s a la destinació seleccionada"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"S'han mogut %(count)d fitxers i/o carpetes a la carpeta '%(destination)s'"
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Moure fitxers i/o carpetes"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Moure els fitxers i/o carpetes seleccionats"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "S'ha canviat el nom de %(count)d fitxers."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Canviar el nom a fitxers"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"S'han copiat %(count)d fitxeres i/o carpetes a la carpeta '%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Copiar fitxers i/o carpetes"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Copiar els fitxers i/o carpetes seleccionats"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "S'han redimensionat %(count)d imatges."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Redimensionar imatges"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Redimensionar les imatges seleccionades"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Sufix que serà afegit als noms de fitxer dels fitxers copiats"
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"El sufix ha de ser una part de nom de fitxer vàlida, simple i en minúscules, "
+"com ara \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Format de renombrat amb valor de clau \"%(key)s\" desconegut."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Format de renombrat no vàlid: %(error)s"
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "opció de miniatures"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "ample"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "alçada"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "retallar"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "ampliar"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Heu de triar una opció de miniatura o paràmetres de redimensionat."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Lloc del subjecte."
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Ubicació del subjecte principal de l'escena. Format: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Foirmat erroni de la ubicació del subjecte."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "La ubicació del subjecte està fora de la imatge."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "La teva entrada: \"{subject_location}\"."
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Ja existeix una carpeta amb aquest nom."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Biblioteca de medis."
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "text alternatiu per defecte"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "títol per defecte"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "lloc del subjecte"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "imatge"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "imatges"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "usuari"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "fitxers"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "portapapers"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "portapapers"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "fitxer"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "element del portapapers"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "elements del portapapers"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "carpeta"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "tamany del fitxer"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "té totes les dades obligatòries"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "nom de fitxer original"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "nom"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "descripció"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "propietari"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "pujat a"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "modificat a"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Permisos desactivats"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Desactiveu tots els permisos d'aquest fitxer. Aquest serà accessible de "
+"forma pública per a tothom."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "creat a"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Carpeta"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Carpetes"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "tots els elements"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "només aquest element"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "aquest elements i els seus fills"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "permetre"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "denegar"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "tipus"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "group"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "tothom"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "pot llegir"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "pot editar"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "pot afegir fills"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "permís de carpeta"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "permisos de carpeta"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "data agafada"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "cal publicar sempre crèdits d'autor"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "cal publicar sempre els drets d'autor"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "ample en píxels."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "alt en píxels"
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "opcions de miniatura"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Pujades sense ordre"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "fitxer als que els falten metadades"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "arrel"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Executar l'acció seleccionada"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Anar"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+"Cliqueu aquí per seleccionar els objectes a través de totes les pàgines"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Seleccionar tots els %(total_count)s fitixers i/o carpetes"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Netejar la selecció"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Tornar a la pàgina principal d'administració"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Inici"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Tornar a l'aplicació Filer"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Tornar a la carpeta arrel"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Tornar a la carpeta '%(folder_name)s'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplicats"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Esborrar els fitxers seleccionats provocarà l'esborrar d'objectes "
+"relacionats, però el teu compte no té permisos per esborrar els següents "
+"tipus d'objectes:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Esborrer els fitxers i/o carpetes seleccionades provocarà l'esborrat dels "
+"següents objectes protegits relacionats:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Segur que voleu esborrar els fitxers i/o carpetes seleccionades? Els "
+"següents objectes i els seus elements relacionats seran esborrats:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "No, porta'm enrere."
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Sí, estic segur"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Història"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Veure al lloc"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Tornar a"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "pàgina principal d'administració"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Icona de la carpeta"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr "Sense permisos per copiar tots els fitxers i/o carpetes seleccionats."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Porta'm enrere"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "No hi ha carpetes de destí disponibles."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "No hi ha fitxers i/o carpetes disponibles."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Els següents fitxers i/o carpetes seran copiats a una carpeta de destí "
+"(mantenint la seva estructura d'arbre):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Carpeta de destí:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Copiar"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "No està permès copiar fitxers a la mateixa carpeta"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+"El vostre compte no té permisos per redimensionar totes les imatges "
+"seleccionades."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "No hi ha imatges disponibles per redimensionar."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Les següents imatges seran redimensionades:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Trieu una opció de miniatura existent o especifiqueu paràmetres de "
+"redimensionat:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Avís: les imatges seran redimensionades al mateix lloc i les originals es "
+"perdran. Considereu realitzar abans una còpia d'aquestes per mantenir els "
+"originals."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Redimensionar"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"El vostre compte no té permisos per moure tots els fitxers i/o carpetes "
+"seleccionats."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "No hi ha fitxers i/o carpetes disponibles per moure."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Els següents fitxers i/o carpetes seran moguts a una carpeta de destí "
+"(mantenint la seva estructura d'arbre):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Moure"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "No està permès moure fitxers a la mateixa carpeta"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+"El vostre compte no té permisos per canviar el nom de tots els fitxers "
+"seleccionats."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "No hi ha fitxers per canviar el nom disponibles."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"En canviarà el nom dels següents fitxers (seguiran estant a les seves "
+"carpetes i mantindran el seu nom de fitxers original, només serà modificat "
+"el nom que es mostrarà):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Canviar el nom"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Tornar a la carpeta pare"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Modificar els detalls de la carpeta actual"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Modificar"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Cliqueu aquí per cercar la frase introduïda"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Cercar"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Tancar"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limitar"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Marqueu per limitar la cercar a la carpeta actual"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Limitar la cerca a la carpeta actual"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Esborrar"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Afegir una Carpeta nova"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Carpeta nova"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Pujar Arxius"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Cal que abans seleccioneu una carpeta"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Nom"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Propietari"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Mida"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Acció"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Modificar els detalls de la carpeta '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s fitxer"
+msgstr[1] "%(counter)s fitxers"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s fitxer"
+msgstr[1] "%(counter)s fitxers"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Modifcar detalls de carpeta"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Esborrar carpeta"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Seleccionar aquest fitxer"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Modificar els detalls de '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Permisos"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "desactivat"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "activat"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Moure els fitxers seleccionats al portapapers."
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Esborrar fitxer"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Deixeu anar fitxers aquí o utilitzeu el botó \"Pujar Fitxers\""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Deixeu anar el fitxer a pujar a:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Pujar"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "cancel·lar"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Pujada correcta!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Pujada cancel·lada!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "anterior"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Pàgina %(number)s de %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "següent"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Seleccionar tots/es %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Afegir nou"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Corregiu el següent error."
+msgstr[1] "Corregiu els següents errors."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Desar"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Portapapers"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Enganxar aquí tots els elements"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Moure tots els fitxer del portapapers a"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Buidar Porta-retalls"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "el portapapers és buït"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "ha fallat la pujada"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Tipus"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "MIda de fitxer"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Modificat"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Creat"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "trobat"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "i"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "cancel·lar la cerca"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Netejar"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "o deixar anar aquí el fitxer"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "no s'ha seleccionat cap fitxer"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Cercar"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Escollir Fitxer"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/cs/LC_MESSAGES/django.mo b/filer/locale/cs/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..c73f2c7d9
Binary files /dev/null and b/filer/locale/cs/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/cs/LC_MESSAGES/django.po b/filer/locale/cs/LC_MESSAGES/django.po
new file mode 100644
index 000000000..e56d59634
--- /dev/null
+++ b/filer/locale/cs/LC_MESSAGES/django.po
@@ -0,0 +1,1265 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Jakub Dorňák , 2020
+# Mirek Simek , 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Jakub Dorňák , 2020\n"
+"Language-Team: Czech (http://app.transifex.com/divio/django-filer/language/"
+"cs/)\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
+"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Pokročilé"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "kanonický odkaz"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr "Nejdříve vyberte položku, která má být změněna."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Výpis složky %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "žádná položka z %(cnt)s není vybrána"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Nebyla vybrána žádná operace."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "Soubory (%(count)d) byly přesunuty do schránky."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Přesunout vybrané soubory do schránky"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Pro vybrané soubory (%(count)d) byla deaktivována oprávnění."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Pro vybrané soubory (%(count)d) byla aktivována oprávnění."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Aktivovat oprávnění pro vybrané soubory"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Deaktivovat oprávnění pro vybrané soubory"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "Vybrané soubory a/nebo složky (%(count)d) byly smazány."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Nemohu smazat soubory a/nebo složky"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Opravdu provést?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Smazat soubory a/nebo složky"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Smazat vybrané soubory a/nebo složky"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Složky pojmenované %s již v cílové složce existují"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Vybrané soubory a/nebo složky (%(count)d) byly přesunuty do složky "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Přesunout soubory a/nebo složky"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Přesunout vybrané soubory a/nebo složky"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "Soubory (%(count)d) vyly přejmenovány."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Přejmenovat soubory"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Soubory a/nebo složky (%(count)d) byly zkopírovány do složky "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Kopírovat soubory a/nebo složky"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Kopírovat vybrané soubory a/nebo složky"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Velikost obrázků (%(count)d) byla změněna."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Změnit velikost obrázků"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Změnit velikost vybraných obrázků"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Koncovka, která bude přidána ke jménům kopírovaných souborů."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Koncovka by měla být jednoduchá součást názvu souboru malými písmeny, "
+"například \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Neznámý formát klíče pro přejmenování \"%(key)s\"."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Špatný formát přejmenování: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "volby náhledu"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "šířka"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "výška"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "oříznout"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "zvětšit"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+"Musíte vybrat předdefinované volby náhledu nebo nastavit jednotlivé "
+"parametry."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Pozice objektu"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Pozice hlavního předmětu fotografie. Formát \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Špatný formát pozice objektu. "
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Zadaná pozice objektu je mimo obrázek. "
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Vaše zadání: \"{subject_location}\". "
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Složka s tímto názvem již existuje."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Správce souborů"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Knihovna médií"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "výchozí alternativní text"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "výchozí popisek"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "poloha objektu"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "obrázek"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "obrázky"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "uživatel"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "soubory"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "schránka"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "schránky"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "soubor"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "položka schránky"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "položky schránky"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "složka"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "velikost souboru"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "má všechna povinná data"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "původní název souboru"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "název"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "popis"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "vlastník"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "nahráno"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "změněno"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Oprávnění neaktivní"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Deaktivovat veškerá oprávnění pro tento soubor. Soubor bude komukoli veřejně "
+"dostupný."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "vytvořeno"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Složka"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Složky"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "všechny položky"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "pouze tato položka"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "tato položka včetně všech potomků"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "povolit"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "zakázat"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "typ"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "skupina"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "kdokoli"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "smí číst"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "smí upravit"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "smí přidávat potomky"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "oprávnění složky"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "oprávnění složky"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "datum pořízení"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "autor musí být vždy uveden"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "copyright musí být vždy uvedeno"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "šířka v pixelech."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "výška v pixelech."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "volby náhledu"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Nezařazené"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "soubory s chybějícími informacemi"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "kořenová složka"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Provést vybranou operaci"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Provést"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Klikněte sem pro výběr všechny položky na všech stránkách výpisu"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Vybrat všechny soubory a/nebo složky (%(total_count)s)"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Zrušit výběr"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Přejít zpět na hlavní stránku administrace"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Hlavní stránka"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Přejít zpět do Správce souborů"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Přejít zpět do kořenové složky"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Přejít zpět do složky '%(folder_name)s'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplicity"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Smazání vybraných souborů a/nebo složek bude mít za následek smazání všech "
+"přidružených objektů, nicméně ke smazání následujících objektů nemáte "
+"oprávnění:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Smazání vybraných souborů a/nebo složek bude mít za následek smazání "
+"následujících přidružených objektů:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Opravdu chcete smazat vybrané soubory a složky? Všechny následující objekty "
+"budou smazány:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Ne, chci zpátky"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Ano"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Historie"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Zobrazit na webu"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Vrátit se do"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "hlavní stránka administrace"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Ikona složky"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr "Nemáte oprávnění kopírovat vybrané soubory a/nebo složky."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Zpět"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Nejsou k dispozici žádné cílové složky."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Žádné soubory ani složky není možno kopírovat."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Následující soubory a/nebo složky budou zkopírovány do cílové slžoky (jejich "
+"stromová struktura bude zachována):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Cílová složka:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopírovat"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Není možné kopírovat soubory do stejné složky"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "Nemáte oprávnění k změně velikosti vybraných obrázků."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Žádné obrázky ke změně velikosti."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Následujícím obrázkům bude změněna velikost:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Vyberte existující volby náhledu nebo zadejte parametry změny velikosti:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Varování: Bude změněna velikost obrázků a původní obrázky budou přepsány. "
+"Pokud chcete zachovat obrázky v původní velikosti, nejdříve vytvořte jejich "
+"kopie."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Změnit velikost"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr "Nemáte oprávnění k přesunu vybraných souborů nebo složek."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Žádné soubory k přesunutí."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Následující soubory a/nebo složky budou přesunyty do cílové složky (jejich "
+"stromová struktura bude zachována)"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Přesunout"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Není možné přesouvat soubory do stejné složky"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "Nemáte oprávnění přejmenovat všechny vybrané soubory."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Žádné soubory k přejmenování."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"Následující soubory budou přejmenovány (změněno bude pouze zobrazované jméno)"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Přejmenovat"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Přejít zpět do nadřazené složky"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Upravit aktuální složku"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Upravit"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Klikněte sem pro vyhledání zadaného výrazu"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Hledat"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Zavřít"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Omezit"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Zaškrtněte pro omezení hledání na aktuální složku"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Omezit hledání na aktuální složku"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Smazat"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Přidá novou složku"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Nová složka"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Nahrát soubory"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Nejdříve musíte vybrat složku"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Název"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Vlastník"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Velikost"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Akce"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Upravit podrobnosti složky '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Upravit podrobnosti složky"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Smazat složku"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Vybrat tento soubor"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Upravit podrobnosti '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Oprávnění"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "neaktivní"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "aktivní"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Přesunout vybrané soubory do schránky"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "Kanonický odkaz '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Stáhnout '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Smazat soubor"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Přetáhněte soubory sem nebo klikněte na tlačítko \"Nahrát soubory\""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Přetáhněte sem soubory, které chcete nahrát do:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Nahrát"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "zrušit"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Nahrávání se zdařilo!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Nahrávání bylo zrušeno!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "předchozí"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Stránka %(number)s z %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "následující"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Vybrat všechny (%(total_count)s)"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Přidat"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Hlavní stránka administrace"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Uložit"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Schtánka"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Vložit všechny položky sem"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Přesunout všechny soubory ve schránce do"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Vyprázdnit schránku"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "schránka je prázdná"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "nahrávání selhalo"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Typ"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Velikost souboru"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Změněno"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Vytvořeno"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "nalezeno"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "a"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "zrušit hledání"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Vyčistit"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "přetáhněte soubory sem"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "žádný soubor nebyl vybrán"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Vyhledat"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Vybrat soubor"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+#~ msgstr[3] "15c0f2d28d6dab1af1f6d94906beb627_pl_3"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/de/LC_MESSAGES/django.mo b/filer/locale/de/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..0f9415701
Binary files /dev/null and b/filer/locale/de/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/de/LC_MESSAGES/django.po b/filer/locale/de/LC_MESSAGES/django.po
new file mode 100644
index 000000000..915585c65
--- /dev/null
+++ b/filer/locale/de/LC_MESSAGES/django.po
@@ -0,0 +1,1244 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Angelo Dini , 2016-2017
+# Fabian Braun , 2023
+# Jannik Vieten , 2016-2017
+# Mitja Martini , 2012
+# Mitja Martini , 2012
+# Peter Wischer , 2018
+# Stefan Foulis , 2016
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Fabian Braun , 2023\n"
+"Language-Team: German (http://app.transifex.com/divio/django-filer/language/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+#| msgid ""
+#| "ccount doesn't have permissions to rename all of the selected files."
+msgid "You do not have permission to upload files."
+msgstr "Du hast keine Berechtigungen, um Dateien hochzuladen."
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr "Ich kann den Zielordner nicht finden. Bitter lade die Seite neu und versuche es noch einmal."
+
+#: admin/clipboardadmin.py:20
+msgid ""
+"Can't use this folder, Permission Denied. Please select another folder."
+msgstr "Zugriff auf diesen Ordner verweigert. Bitte wähle einen anderen Ordner."
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Fortgeschritten"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "Kanonische URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr "Einträge müssen ausgewählt werden, um Aktionen darauf auszuführen. Keine Einträge wurden geändert."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s ausgewählt"
+msgstr[1] "Alle %(total_count)s ausgewählt"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Verzeichnis Auflistung für %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 von %(cnt)s ausgewählt"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Keine Aktion ausgewählt."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "%(count)d Dateien wurden erfolgreich in die Zwischenablage gelegt."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Ausgewählte Dateien in die Zwischenablage legen"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Berechtigungen für %(count)d Dateien erfolgreich deaktiviert."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Berechtigungen für %(count)d Dateien erfolgreich aktiviert."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Berechtigungen für ausgewählte Dateien aktivieren"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Berechtigungen für ausgewählte Dateien deaktivieren"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "%(count)d Dateien und/oder Ordner wurden erfolgreich gelöscht."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Dateien und/oder Ordner können nicht gelöscht werden"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Bist Du sicher?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Lösche Dateien und/oder Ordner"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Lösche ausgewählte Dateien und/oder Ordner"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Die Ordner mit den Namen %s existieren bereits am ausgewählten Zielort"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "%(count)d Dateien und/oder Ordner wurden erfolgreich in den Ordner '%(destination)s' verschoben."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Verschiebe Dateien und/oder Ordner"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Ausgewählte Dateien und/oder Ordner verschieben"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "%(count)d Dateien wurden erfolgreich umbenannt."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Dateien umbenennen"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "%(count)d Dateien und/oder Ordner wurden erfolgreich in den Ordner '%(destination)s' kopiert."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Kopiere Dateien und/oder Ordner"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Ausgewählte Dateien und/oder Ordner kopieren"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Die Bildgrösse von %(count)d Bildern wurde erfolgreich geändert."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Bildgrössen verändern"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Die Bildgrössen der ausgewählten Bilder verändern"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Die Dateiendung, welche an die Dateinamen der kopierten Dateien angehängt wird."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr "Die Dateiendung sollte ein gültiger, einfacher und kleingeschriebener Teil eines Dateinamens sein, wie zum Beispiel \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Unbekannter Schlüssel für das Umbenennungs-Format: %(key)s."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Ungültiges Umbenennungs-Format: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "Vorschaubild Optionen"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "Breite"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "Höhe"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "Beschneiden"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "Vergrössern"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Vorschaubild Optionen oder Parameter zur Grössenänderung müssen ausgewählt werden."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Ort des Hauptinhalts"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Position des Hauptinhalts des Bildes. Format: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Ungültiges Format zur Positionsangabe."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Angegebene Position des Hauptinhalts liegt außerhalb des Bildes."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Deine Eingabe: \"{subject_location}\". "
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr "Wer"
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr "Was"
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Dieser Ordnername wird bereits verwendet."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Medienbibliothek"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "Standard Alt-Text"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "Standard Bildlegende"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "Ort des Hauptinhalts"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "Bild"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "Bilder"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr "Bildformat nicht erkannt oder Bildgröße überschreitet den Grenzwert von %(max_pixels)d Millionen Pixeln um einen Faktor 2 oder mehr. Vor erneutem Hochladen prüfen Sie das Dateiformat oder verkleinern Sie das Bild auf %(width)d x %(height)d oder weniger."
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr "Bildgröße (%(pixels)d Millionen Pixel) überschreitet den Grenzwert von %(max_pixels)d Millionen Pixeln. Vor erneutem Hochladen verkleinern Sie das Bild auf %(width)d x %(height)d oder weniger."
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "Benutzer"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "Dateien"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "Zwischenablage"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "Zwischenablagen"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "Datei"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "Eintrag der Zwischenablage"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "Einträge der Zwischenablage"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "Ordner"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "Dateigrösse"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "hat alle Pflichtinhalte"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "ursprünglicher Dateiname"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "Name"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "Beschreibung"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "Besitzer"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "Hochgeladen am"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "Verändert am"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Berechtigungen deaktiviert"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr "Zugriffskontrolle für diese Datei deaktivieren. Die Datei wird für jeden öffentlich zugreifbar sein."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr "Übergeordneter Ordner"
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "Angelegt am"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Ordner"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Ordner"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "alle Einträge"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "nur dieser Eintrag"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "dieser Eintrag und alle darunter liegenden Einträge"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr "vererben"
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "erlauben"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "verbieten"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "Typ"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "Gruppe"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "Jeder"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "kann lesen"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "kann ändern"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "kann Kinder hinzufügen"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "Ordnerberechtigung"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "Ordnerberechtigungen"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr "Für den Typ \"Alle Einträge\" kann kein Ordner ausgewählt werden. "
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr "Für alle Typen außer \"Alle Einträge\" muss ein Ordner ausgewählt werden."
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr "Zusammen mit \"Jeder\" kann kein Benutzer oder eine Gruppe ausgewählt werden."
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr "Mindestens ein Eintrag muss gewählt werden: \"Benutzer\", \"Gruppe\" oder \"Jeder\"."
+
+#: models/foldermodels.py:360
+#| msgid "Folders"
+msgid "All Folders"
+msgstr "Alle Ordner"
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr "Logischer Pfad"
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr "Nutzer: {user}"
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr "Gruppe: {group}"
+
+#: models/foldermodels.py:375
+#| msgid "everybody"
+msgid "Everybody"
+msgstr "Jede(r)"
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr "Edit"
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr "Lesen"
+
+#: models/foldermodels.py:390
+#| msgid "can add children"
+msgid "Add children"
+msgstr "Unterordner hinzufügen"
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "Aufgenommen am"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "Autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "Nennung des Autoren ist Pflicht"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "Veröffentlichung des Copyright ist Pflicht"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "Breite in Pixel."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "Höhe in Pixel."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "Vorschaubild-Optionen"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Nicht sortierte Uploads"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "Dateien mit fehlenden Metadaten"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "Start"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr "Tabellenansicht"
+
+#: settings.py:278
+#| msgid "thumbnail option"
+msgid "Show thumbnail view"
+msgstr "Vorschauansicht"
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Die ausgewählte Aktion ausführen"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Los"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Hier klicken, um die Objekte über alle Seiten hinweg auszuwählen"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Alle %(total_count)s Dateien und/oder Ordner auswählen"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Auswahl aufheben"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Zur Admin Startseite zurück gehen"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Startseite"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Zur Filer App zurück gehen"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Zum Root Ordner zurück gehen"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Zum Ordner '%(folder_name)s' zurück gehen"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplikate"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr "Beim Löschen der ausgewählten Dateien und/oder Ordner, würden verbundene Objekte mitgelöscht. Dein Benutzerkonto hat jedoch nicht die erforderlichen Berechtigungen, um die folgenden Objekttypen zu löschen:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr "Das Löschen der folgenden ausgewählten Dateien und/oder Ordner würde das Löschen der folgenden geschützten verknüpften Objekte erfordern:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr "Bist Du sicher, dass Du die ausgewählten Dateien und/oder Ordner löschen willst? Alle der folgenden Objekte und ihre verbundenen Einträge werden gelöscht:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Nein, zurück gehen"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Ja, ich bin sicher"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Historie"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Auf der Website ansehen"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Gehe zurück zu"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "Admin Startseite"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Ordner Icon"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files "
+"and/or folders."
+msgstr "Dein Benutzerkonto hat nicht die Berechtigungen, um alle der ausgewählten Dateien und/oder Ordner zu kopieren."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Zurück gehen"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Es gibt keine verwendbaren Zielordner."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Es gibt keine Dateien und/oder Ordner zum Kopieren."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr "Die folgenden Dateien und/oder Ordner werden in einen Zielordner kopiert (unter Beibehaltung ihrer Ordnerstruktur):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Zielordner"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopieren"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Es ist nicht erlaubt Dateien in den selben Ordner zu kopieren"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "Dein Benutzerkonto hat nicht die erforderlichen Berechtigungen, um die Grösse jedes der ausgewählten Bilder zu verändern."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Es gibt keine Bilder auf denen die Größenänderung anwendbar ist."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Die Grösse der folgenden Bilder wird verändert:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "Wähle eine vorhandene Vorschaubild Option aus oder gib die Parameter für die Bildgrössenänderung an:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr "Warnung: Die Bilder werden in-place verändert. Die Originale gehen dabei verloren. Lege bei Bedarf eine Kopie der Originale an."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Bildgrösse verändern"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files "
+"and/or folders."
+msgstr "Dein Benutzerkonto hat nicht die erforderlichen Berechtigungen, um alle ausgewählten Dateien und/oder Ordner zu verschieben."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Es gibt keine verschiebbaren Dateien und/oder Ordner."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr "Die folgenden Dateien und/oder Ordner werden in ein Zielordner verschoben (unter Beibehaltung ihrer Ordnerstruktur):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Verschieben"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Es ist nicht erlaubt Dateien in den selben Ordner zu verschieben"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "Dein Benutzerkonto hat nicht die erforderlichen Berechtigungen, um alle ausgewählten Dateien umzubenennen."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Es sind keine Dateien, die umbenannt werden können."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr "Die folgenden Dateien werden umbenannt (sie bleiben in ihren Ordnern und behalten ihren originalen Dateinamen, nur dier angezeigte Dateiname wird geändert):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Gehe zurück zum übergeordneten Ordner"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Details des aktuellen Ordners ändern"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Ändern"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Hier klicken, um nach dem eingegebenen Text zu suchen"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Suchen"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Schliessen"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limit"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Aktivieren, um die Suche auf den aktuellen Ordner zu beschränken"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Suche auf aktuellen Ordner beschränken"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Löschen"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Fügt einen neuen Ordner hinzu"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Neuer Ordner"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Dateien hochladen"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Du musst zuerst einen Ordner auswählen"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Name"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Besitzer"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Grösse"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Aktion"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Ändere Details des Ordners '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s Ordner"
+msgstr[1] "%(counter)s Ordner"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s Datei"
+msgstr[1] "%(counter)s Dateien"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Ordner-Details ändern"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Ordner löschen"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Diese Datei auswählen"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Ändere Details von '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Berechtigungen"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "deaktiviert"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "aktiviert"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "URL in Zwischenablage kopiert"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Canonical url '%(item_label)s'"
+msgstr "Kanonische URL '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Download '%(item_label)s'"
+msgstr "'%(item_label)s' herunterladen"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Datei löschen"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Dateien hier ablegen oder den \"Datei hochladen\" Button benutzen."
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Dateien hier ablegen um sie in den folgenden Ordner abzulegen:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Hochladen"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "Abbrechen"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Upload erfolgreich!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Upload abgebrochen!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "vorige"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Seite %(number)s von %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "nächste"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Alle %(total_count)s auswählen"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+#| msgid "Select this file"
+msgid "Select all"
+msgstr "Alle auswählen"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+#| msgid "Filer"
+msgid "Files"
+msgstr "Dateien"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Hinzufügen"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Django Seiten-Administration"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Bitte korrigiere den unten genannten Fehler."
+msgstr[1] "Bitte korrigiere die unten genannten Fehler."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Sichern"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr "Dein Browser unterstützt kein Audio."
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr "Dein Browser unterstützt kein Video."
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Zwischenablage"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Alle Einträge hier einfügen"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Bewege alle Dateien in der Zwischenablage nach"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Zwischenablage leeren"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "die Zwischenablage ist leer"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "das Hochladen schlug fehl"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr "Herunterladen"
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr "Vergrößern"
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+#| msgid "file missing"
+msgid "File is missing"
+msgstr "Datei fehlt"
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Typ"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Dateigrösse"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Verändert am"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Erstellt am"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "gefunden"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "und"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "Suche abbrechen"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Zurücksetzen"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "oder die Datei hierhin ziehen"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "keine Datei ausgewählt"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Nachschlagen"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Datei auswählen"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+#| msgid "Choose File"
+msgid "Choose Folder"
+msgstr "Ordner auswählen"
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr "Datei \"{file_name}\": Die Sicherheitseinstellung der Seite haben die Datei zurückgewiesen."
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr "Datei \"{file_name}\": Die Sicherheitseinstellung weisen {file_type}-Dateien zurück."
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr "Datei \"{file_name}\": Die Sicherheitseinstellung weisen HTML-Dateien zurück."
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr "Datei \"{file_name}\": Zurückgewiesen, da eine \"Cross Site Scripting\"-Attacke nicht ausgeschlossen werden kann."
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr "Datei \"{file_name}\": SVG-Format nicht erkannt"
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/en/LC_MESSAGES/django.mo b/filer/locale/en/LC_MESSAGES/django.mo
index 11a1682b6..4f8792c06 100644
Binary files a/filer/locale/en/LC_MESSAGES/django.mo and b/filer/locale/en/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/en/LC_MESSAGES/django.po b/filer/locale/en/LC_MESSAGES/django.po
index 449ccce4c..fbcc67bdc 100644
--- a/filer/locale/en/LC_MESSAGES/django.po
+++ b/filer/locale/en/LC_MESSAGES/django.po
@@ -1,483 +1,643 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
#
+# Translators:
+# Translators:
msgid ""
msgstr ""
-"Project-Id-Version: django-filer 0.9\n"
+"Project-Id-Version: django Filer\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-07-13 19:10+0200\n"
-"PO-Revision-Date: 2012-09-03 20:10+0100\n"
-"Last-Translator: Stefan Foulis \n"
-"Language-Team: en \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2016-06-17 14:16+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: English (http://www.transifex.com/divio/django-filer/language/"
+"en/)\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: views.py:103
-msgid "Folder with this name already exists."
+#: admin/clipboardadmin.py:17
+#, fuzzy
+#| msgid ""
+#| "Your account doesn't have permissions to rename all of the selected files."
+msgid "You do not have permission to upload files."
msgstr ""
+"Your account doesn't have permissions to rename all of the selected files."
-#: admin/fileadmin.py:41
-msgid "Advanced"
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
msgstr ""
-#: admin/folderadmin.py:324 admin/folderadmin.py:427
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Advanced"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "canonical URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
msgid ""
"Items must be selected in order to perform actions on them. No items have "
"been changed."
msgstr ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
-#: admin/folderadmin.py:344
+#: admin/folderadmin.py:434
#, python-format
msgid "%(total_count)s selected"
msgid_plural "All %(total_count)s selected"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%(total_count)s selected"
+msgstr[1] "All %(total_count)s selected"
-#: admin/folderadmin.py:377
+#: admin/folderadmin.py:460
#, python-format
-msgid "0 of %(cnt)s selected"
+msgid "Directory listing for %(folder_name)s"
msgstr ""
-#: admin/folderadmin.py:456
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 of %(cnt)s selected"
+
+#: admin/folderadmin.py:612
msgid "No action selected."
-msgstr ""
+msgstr "No action selected."
-#: admin/folderadmin.py:497
+#: admin/folderadmin.py:664
#, python-format
msgid "Successfully moved %(count)d files to clipboard."
-msgstr ""
+msgstr "Successfully moved %(count)d files to clipboard."
-#: admin/folderadmin.py:503
+#: admin/folderadmin.py:669
msgid "Move selected files to clipboard"
-msgstr ""
+msgstr "Move selected files to clipboard"
-#: admin/folderadmin.py:537
+#: admin/folderadmin.py:709
#, python-format
msgid "Successfully disabled permissions for %(count)d files."
-msgstr ""
+msgstr "Successfully disabled permissions for %(count)d files."
-#: admin/folderadmin.py:541
+#: admin/folderadmin.py:711
#, python-format
msgid "Successfully enabled permissions for %(count)d files."
-msgstr ""
+msgstr "Successfully enabled permissions for %(count)d files."
-#: admin/folderadmin.py:550
+#: admin/folderadmin.py:719
msgid "Enable permissions for selected files"
-msgstr ""
+msgstr "Enable permissions for selected files"
-#: admin/folderadmin.py:555
+#: admin/folderadmin.py:725
msgid "Disable permissions for selected files"
-msgstr ""
+msgstr "Disable permissions for selected files"
-#: admin/folderadmin.py:623
+#: admin/folderadmin.py:789
#, python-format
msgid "Successfully deleted %(count)d files and/or folders."
-msgstr ""
+msgstr "Successfully deleted %(count)d files and/or folders."
-#: admin/folderadmin.py:630
+#: admin/folderadmin.py:794
msgid "Cannot delete files and/or folders"
-msgstr ""
+msgstr "Cannot delete files and/or folders"
-#: admin/folderadmin.py:632
+#: admin/folderadmin.py:796
msgid "Are you sure?"
-msgstr ""
+msgstr "Are you sure?"
-#: admin/folderadmin.py:637
+#: admin/folderadmin.py:802
msgid "Delete files and/or folders"
-msgstr ""
+msgstr "Delete files and/or folders"
-#: admin/folderadmin.py:656
+#: admin/folderadmin.py:823
msgid "Delete selected files and/or folders"
-msgstr ""
+msgstr "Delete selected files and/or folders"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Folders with names %s already exist at the selected destination"
-#: admin/folderadmin.py:771
+#: admin/folderadmin.py:934
#, python-format
msgid ""
"Successfully moved %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
-#: admin/folderadmin.py:778 admin/folderadmin.py:780
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
msgid "Move files and/or folders"
-msgstr ""
+msgstr "Move files and/or folders"
-#: admin/folderadmin.py:797
+#: admin/folderadmin.py:959
msgid "Move selected files and/or folders"
-msgstr ""
+msgstr "Move selected files and/or folders"
-#: admin/folderadmin.py:854
+#: admin/folderadmin.py:1016
#, python-format
msgid "Successfully renamed %(count)d files."
-msgstr ""
+msgstr "Successfully renamed %(count)d files."
-#: admin/folderadmin.py:862 admin/folderadmin.py:864 admin/folderadmin.py:881
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
msgid "Rename files"
-msgstr ""
+msgstr "Rename files"
-#: admin/folderadmin.py:975
+#: admin/folderadmin.py:1137
#, python-format
msgid ""
"Successfully copied %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
-#: admin/folderadmin.py:989 admin/folderadmin.py:991
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
msgid "Copy files and/or folders"
-msgstr ""
+msgstr "Copy files and/or folders"
-#: admin/folderadmin.py:1010
+#: admin/folderadmin.py:1174
msgid "Copy selected files and/or folders"
-msgstr ""
+msgstr "Copy selected files and/or folders"
-#: admin/folderadmin.py:1105
+#: admin/folderadmin.py:1279
#, python-format
msgid "Successfully resized %(count)d images."
-msgstr ""
+msgstr "Successfully resized %(count)d images."
-#: admin/folderadmin.py:1113 admin/folderadmin.py:1115
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
msgid "Resize images"
-msgstr ""
+msgstr "Resize images"
-#: admin/folderadmin.py:1133
+#: admin/folderadmin.py:1303
msgid "Resize selected images"
-msgstr ""
+msgstr "Resize selected images"
-#: admin/forms.py:26
+#: admin/forms.py:24
msgid "Suffix which will be appended to filenames of copied files."
-msgstr ""
+msgstr "Suffix which will be appended to filenames of copied files."
-#: admin/forms.py:33
+#: admin/forms.py:31
#, python-format
msgid ""
"Suffix should be a valid, simple and lowercase filename part, like "
"\"%(valid)s\"."
msgstr ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
-#: admin/forms.py:54
+#: admin/forms.py:52
#, python-format
msgid "Unknown rename format value key \"%(key)s\"."
-msgstr ""
+msgstr "Unknown rename format value key \"%(key)s\"."
-#: admin/forms.py:56
+#: admin/forms.py:54
#, python-format
msgid "Invalid rename format: %(error)s."
-msgstr ""
+msgstr "Invalid rename format: %(error)s."
-#: admin/forms.py:62
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
msgid "thumbnail option"
-msgstr ""
+msgstr "thumbnail option"
-#: admin/forms.py:63
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
msgid "width"
-msgstr ""
+msgstr "width"
-#: admin/forms.py:64
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
msgid "height"
-msgstr ""
+msgstr "height"
-#: admin/forms.py:65
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
msgid "crop"
-msgstr ""
+msgstr "crop"
-#: admin/forms.py:66
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
msgid "upscale"
-msgstr ""
+msgstr "upscale"
-#: admin/forms.py:71
+#: admin/forms.py:79
msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Thumbnail option or resize parameters must be choosen."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Subject location"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Location of the main subject of the scene. Format: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Invalid subject location format. "
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Subject location is outside of the image. "
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Your input: \"{subject_location}\". "
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
msgstr ""
-#: admin/forms.py:73
-msgid "Resize parameters must be choosen."
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
msgstr ""
-#: admin/imageadmin.py:12
-msgid "Subject location"
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Folder with this name already exists."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
msgstr ""
-#: admin/imageadmin.py:13
-msgid "Location of the main subject of the scene."
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "default alt text"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "default caption"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "subject location"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "image"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "images"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
msgstr ""
-#: models/clipboardmodels.py:9 models/foldermodels.py:236
-msgid "user"
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
msgstr ""
-#: models/clipboardmodels.py:11 models/filemodels.py:287
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "user"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
msgid "files"
-msgstr ""
+msgstr "files"
-#: models/clipboardmodels.py:34 models/clipboardmodels.py:40
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
msgid "clipboard"
-msgstr ""
+msgstr "clipboard"
-#: models/clipboardmodels.py:35
+#: models/clipboardmodels.py:25
msgid "clipboards"
-msgstr ""
+msgstr "clipboards"
-#: models/clipboardmodels.py:39 models/filemodels.py:35
-#: models/filemodels.py:286
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
msgid "file"
-msgstr ""
+msgstr "file"
-#: models/clipboardmodels.py:44
+#: models/clipboardmodels.py:56
msgid "clipboard item"
-msgstr ""
+msgstr "clipboard item"
-#: models/clipboardmodels.py:45
+#: models/clipboardmodels.py:57
msgid "clipboard items"
-msgstr ""
+msgstr "clipboard items"
-#: models/filemodels.py:33 templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
#: templates/admin/filer/folder/new_folder_form.html:4
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
msgid "folder"
-msgstr ""
+msgstr "folder"
-#: models/filemodels.py:36
+#: models/filemodels.py:81
msgid "file size"
-msgstr ""
+msgstr "file size"
-#: models/filemodels.py:38
+#: models/filemodels.py:87
msgid "sha1"
-msgstr ""
+msgstr "sha1"
-#: models/filemodels.py:40
+#: models/filemodels.py:94
msgid "has all mandatory data"
-msgstr ""
+msgstr "has all mandatory data"
-#: models/filemodels.py:42
+#: models/filemodels.py:100
msgid "original filename"
-msgstr ""
+msgstr "original filename"
-#: models/filemodels.py:44 models/foldermodels.py:99
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
msgid "name"
-msgstr ""
+msgstr "name"
-#: models/filemodels.py:46
+#: models/filemodels.py:116
msgid "description"
-msgstr ""
+msgstr "description"
-#: models/filemodels.py:50
+#: models/filemodels.py:125 models/foldermodels.py:108
msgid "owner"
-msgstr "uploaded by"
+msgstr "owner"
-#: models/filemodels.py:52 models/foldermodels.py:105
+#: models/filemodels.py:129 models/foldermodels.py:116
msgid "uploaded at"
-msgstr ""
+msgstr "uploaded at"
-#: models/filemodels.py:53 models/foldermodels.py:108
+#: models/filemodels.py:134 models/foldermodels.py:126
msgid "modified at"
-msgstr ""
+msgstr "modified at"
-#: models/filemodels.py:57
+#: models/filemodels.py:140
msgid "Permissions disabled"
+msgstr "Permissions disabled"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
msgstr ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
-#: models/filemodels.py:58
-msgid "Disable any permission checking for this "
+#: models/foldermodels.py:94
+msgid "parent"
msgstr ""
-#: models/foldermodels.py:107
+#: models/foldermodels.py:121
msgid "created at"
-msgstr ""
+msgstr "created at"
-#: models/foldermodels.py:211
-#: templates/admin/filer/widgets/admin_folder.html:3
-#: templates/admin/filer/widgets/admin_folder.html:5
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Folder"
-msgstr ""
+msgstr "Folder"
-#: models/foldermodels.py:212
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
msgid "Folders"
-msgstr ""
+msgstr "Folders"
-#: models/foldermodels.py:227
+#: models/foldermodels.py:260
msgid "all items"
-msgstr ""
+msgstr "all items"
-#: models/foldermodels.py:228
+#: models/foldermodels.py:261
msgid "this item only"
-msgstr ""
+msgstr "this item only"
-#: models/foldermodels.py:229
+#: models/foldermodels.py:262
msgid "this item and all children"
+msgstr "this item and all children"
+
+#: models/foldermodels.py:266
+msgid "inherit"
msgstr ""
-#: models/foldermodels.py:233
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "allow"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "deny"
+
+#: models/foldermodels.py:280
msgid "type"
-msgstr ""
+msgstr "type"
-#: models/foldermodels.py:239
+#: models/foldermodels.py:297
msgid "group"
-msgstr ""
+msgstr "group"
-#: models/foldermodels.py:240
+#: models/foldermodels.py:304
msgid "everybody"
-msgstr ""
-
-#: models/foldermodels.py:242
-msgid "can edit"
-msgstr ""
+msgstr "everybody"
-#: models/foldermodels.py:243
+#: models/foldermodels.py:309
msgid "can read"
-msgstr ""
+msgstr "can read"
-#: models/foldermodels.py:244
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "can edit"
+
+#: models/foldermodels.py:325
msgid "can add children"
-msgstr ""
+msgstr "can add children"
-#: models/foldermodels.py:273
+#: models/foldermodels.py:333
msgid "folder permission"
-msgstr ""
+msgstr "folder permission"
-#: models/foldermodels.py:274
+#: models/foldermodels.py:334
msgid "folder permissions"
-msgstr ""
+msgstr "folder permissions"
-#: models/imagemodels.py:39
-msgid "date taken"
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
msgstr ""
-#: models/imagemodels.py:42
-msgid "default alt text"
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
msgstr ""
-#: models/imagemodels.py:43
-msgid "default caption"
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
msgstr ""
-#: models/imagemodels.py:45 templates/image_filer/image.html:6
-msgid "author"
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
msgstr ""
-#: models/imagemodels.py:47
-msgid "must always publish author credit"
-msgstr ""
+#: models/foldermodels.py:360
+#, fuzzy
+#| msgid "Folders"
+msgid "All Folders"
+msgstr "Folders"
-#: models/imagemodels.py:48
-msgid "must always publish copyright"
+#: models/foldermodels.py:362
+msgid "Logical Path"
msgstr ""
-#: models/imagemodels.py:50
-msgid "subject location"
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
msgstr ""
-#: models/imagemodels.py:200
-msgid "image"
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
msgstr ""
-#: models/imagemodels.py:201
-msgid "images"
+#: models/foldermodels.py:375
+#, fuzzy
+#| msgid "everybody"
+msgid "Everybody"
+msgstr "everybody"
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
msgstr ""
-#: models/virtualitems.py:45
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "unfiled files"
+#: models/foldermodels.py:389
+msgid "Read"
msgstr ""
-#: models/virtualitems.py:59
+#: models/foldermodels.py:390
+#, fuzzy
+#| msgid "can add children"
+msgid "Add children"
+msgstr "can add children"
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "date taken"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "author"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "must always publish author credit"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "must always publish copyright"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "width in pixel."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "height in pixel."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "thumbnail options"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Unsorted Uploads"
+
+#: models/virtualitems.py:73
msgid "files with missing metadata"
-msgstr ""
+msgstr "files with missing metadata"
-#: models/virtualitems.py:73 templates/admin/filer/breadcrumbs.html:6
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:10
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
msgid "root"
+msgstr "root"
+
+#: settings.py:273
+msgid "Show table view"
msgstr ""
-#: templates/admin/filer/actions.html:4
+#: settings.py:278
+#, fuzzy
+#| msgid "thumbnail option"
+msgid "Show thumbnail view"
+msgstr "thumbnail option"
+
+#: templates/admin/filer/actions.html:5
msgid "Run the selected action"
-msgstr ""
+msgstr "Run the selected action"
-#: templates/admin/filer/actions.html:4
+#: templates/admin/filer/actions.html:5
msgid "Go"
-msgstr ""
+msgstr "Go"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
msgid "Click here to select the objects across all pages"
-msgstr ""
+msgstr "Click here to select the objects across all pages"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
#, python-format
msgid "Select all %(total_count)s files and/or folders"
-msgstr ""
+msgstr "Select all %(total_count)s files and/or folders"
-#: templates/admin/filer/actions.html:13
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
msgid "Clear selection"
-msgstr ""
+msgstr "Clear selection"
#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
msgid "Go back to admin homepage"
-msgstr ""
+msgstr "Go back to admin homepage"
#: templates/admin/filer/breadcrumbs.html:4
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
msgid "Home"
-msgstr ""
+msgstr "Home"
#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
msgid "Go back to Filer app"
-msgstr ""
-
-#: templates/admin/filer/breadcrumbs.html:5
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/image_filer/image_export_form.html:8
-msgid "Filer"
-msgstr ""
+msgstr "Go back to Filer app"
#: templates/admin/filer/breadcrumbs.html:6
-#: templates/image_filer/image_export_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Go back to root folder"
-msgstr ""
+msgstr "Go back to root folder"
#: templates/admin/filer/breadcrumbs.html:8
-#: templates/admin/filer/breadcrumbs.html:11
-#: templates/admin/filer/folder/change_form.html:11
-#: templates/image_filer/image_export_form.html:12
-#: templates/image_filer/image_export_form.html:14
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
#, python-format
msgid "Go back to '%(folder_name)s' folder"
-msgstr ""
+msgstr "Go back to '%(folder_name)s' folder"
-#: templates/admin/filer/change_form.html:28
-msgid "duplicates"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:13
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the "
-"following protected related objects:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:29
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:34
-#: templates/admin/filer/delete_selected_files_confirmation.html:45
-msgid "Yes, I'm sure"
-msgstr ""
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplicates"
#: templates/admin/filer/delete_selected_files_confirmation.html:11
msgid ""
@@ -485,399 +645,636 @@ msgid ""
"objects, but your account doesn't have permission to delete the following "
"types of objects:"
msgstr ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
#: templates/admin/filer/delete_selected_files_confirmation.html:19
msgid ""
"Deleting the selected files and/or folders would require deleting the "
"following protected related objects:"
msgstr ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
#: templates/admin/filer/delete_selected_files_confirmation.html:27
msgid ""
"Are you sure you want to delete the selected files and/or folders? All of "
"the following objects and their related items will be deleted:"
msgstr ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:7
-#: templates/image_filer/image_export_form.html:8
-#: templates/image_filer/image_export_form.html:16
-msgid "Go back to"
-msgstr ""
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "No, take me back"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
-msgid "admin homepage"
-msgstr ""
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Yes, I'm sure"
-#: templates/admin/filer/folder/change_form.html:22
-#: templates/admin/filer/image/change_form.html:9
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
msgid "History"
-msgstr ""
+msgstr "History"
+#: templates/admin/filer/file/change_form.html:37
#: templates/admin/filer/folder/change_form.html:23
-#: templates/admin/filer/image/change_form.html:10
+#: templates/admin/filer/image/change_form.html:37
msgid "View on site"
-msgstr ""
+msgstr "View on site"
-#: templates/admin/filer/folder/change_form.html:35
-#: templates/admin/filer/folder/directory_listing.html:75
-#: templates/admin/filer/folder/directory_listing.html:85
-#: templates/admin/filer/folder/directory_table.html:23
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Go back to"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "admin homepage"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
msgid "Folder Icon"
-msgstr ""
+msgstr "Folder Icon"
-#: templates/admin/filer/folder/choose_copy_destination.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:23
msgid ""
"Your account doesn't have permissions to copy all of the selected files and/"
"or folders."
msgstr ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
-#: templates/admin/filer/folder/choose_copy_destination.html:15
-#: templates/admin/filer/folder/choose_move_destination.html:15
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Take me back"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
msgid "There are no destination folders available."
-msgstr ""
+msgstr "There are no destination folders available."
-#: templates/admin/filer/folder/choose_copy_destination.html:18
+#: templates/admin/filer/folder/choose_copy_destination.html:35
msgid "There are no files and/or folders available to copy."
-msgstr ""
+msgstr "There are no files and/or folders available to copy."
-#: templates/admin/filer/folder/choose_copy_destination.html:20
+#: templates/admin/filer/folder/choose_copy_destination.html:40
msgid ""
"The following files and/or folders will be copied to a destination folder "
"(retaining their tree structure):"
msgstr ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
-#: templates/admin/filer/folder/choose_copy_destination.html:32
-#: templates/admin/filer/folder/choose_move_destination.html:32
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
msgid "Destination folder:"
-msgstr ""
+msgstr "Destination folder:"
-#: templates/admin/filer/folder/choose_copy_destination.html:39
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
msgid "Copy"
-msgstr ""
+msgstr "Copy"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "It is not allowed to copy files into same folder"
-#: templates/admin/filer/folder/choose_images_resize_options.html:12
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
msgid ""
"Your account doesn't have permissions to resize all of the selected images."
msgstr ""
+"Your account doesn't have permissions to resize all of the selected images."
-#: templates/admin/filer/folder/choose_images_resize_options.html:15
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
msgid "There are no images available to resize."
-msgstr ""
+msgstr "There are no images available to resize."
-#: templates/admin/filer/folder/choose_images_resize_options.html:17
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
msgid "The following images will be resized:"
-msgstr ""
-
-#: templates/admin/filer/folder/choose_images_resize_options.html:30
-msgid "Choose an existing thumbnail option or enter resize parameters:"
-msgstr ""
+msgstr "The following images will be resized:"
#: templates/admin/filer/folder/choose_images_resize_options.html:32
-msgid "Choose resize parameters:"
-msgstr ""
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "Choose an existing thumbnail option or enter resize parameters:"
-#: templates/admin/filer/folder/choose_images_resize_options.html:35
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
msgid ""
"Warning: Images will be resized in-place and originals will be lost. Maybe "
"first make a copy of them to retain the originals."
msgstr ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
-#: templates/admin/filer/folder/choose_images_resize_options.html:36
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
msgid "Resize"
-msgstr ""
+msgstr "Resize"
-#: templates/admin/filer/folder/choose_move_destination.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:35
msgid ""
"Your account doesn't have permissions to move all of the selected files and/"
"or folders."
msgstr ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
-#: templates/admin/filer/folder/choose_move_destination.html:18
+#: templates/admin/filer/folder/choose_move_destination.html:47
msgid "There are no files and/or folders available to move."
-msgstr ""
+msgstr "There are no files and/or folders available to move."
-#: templates/admin/filer/folder/choose_move_destination.html:20
+#: templates/admin/filer/folder/choose_move_destination.html:52
msgid ""
"The following files and/or folders will be moved to a destination folder "
"(retaining their tree structure):"
msgstr ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
-#: templates/admin/filer/folder/choose_move_destination.html:38
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
msgid "Move"
-msgstr ""
+msgstr "Move"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "It is not allowed to move files into same folder"
-#: templates/admin/filer/folder/choose_rename_format.html:12
+#: templates/admin/filer/folder/choose_rename_format.html:15
msgid ""
"Your account doesn't have permissions to rename all of the selected files."
msgstr ""
+"Your account doesn't have permissions to rename all of the selected files."
-#: templates/admin/filer/folder/choose_rename_format.html:15
+#: templates/admin/filer/folder/choose_rename_format.html:18
msgid "There are no files available to rename."
-msgstr ""
+msgstr "There are no files available to rename."
-#: templates/admin/filer/folder/choose_rename_format.html:17
+#: templates/admin/filer/folder/choose_rename_format.html:20
msgid ""
"The following files will be renamed (they will stay in their folders and "
"keep original filename, only displayed filename will be changed):"
msgstr ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
-#: templates/admin/filer/folder/choose_rename_format.html:54
+#: templates/admin/filer/folder/choose_rename_format.html:59
msgid "Rename"
-msgstr ""
+msgstr "Rename"
-#: templates/admin/filer/folder/directory_listing.html:66
-msgid "Adds a new Folder"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Go back to the parent folder"
-#: templates/admin/filer/folder/directory_listing.html:66
-#: templates/image_filer/include/export_dialog.html:34
-msgid "New Folder"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Change current folder details"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "upload files"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Change"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "Upload"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Click here to run search for entered phrase"
-#: templates/admin/filer/folder/directory_listing.html:74
-msgid "Go back to the parent folder"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Search"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:18
-#, python-format
-msgid "1 folder"
-msgid_plural "%(counter)s folders"
-msgstr[0] ""
-msgstr[1] ""
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Close"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:19
-#, python-format
-msgid "1 file"
-msgid_plural "%(counter)s files"
-msgstr[0] ""
-msgstr[1] ""
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limit"
-#: templates/admin/filer/folder/directory_listing.html:80
-msgid "Change current folder details"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Check it to limit the search to current folder"
-#: templates/admin/filer/folder/directory_listing.html:80
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:43
-msgid "Change"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Limit the search to current folder"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Delete"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Adds a new Folder"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "New Folder"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Upload Files"
-#: templates/admin/filer/folder/directory_table.html:13
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "You have to select a folder first"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
msgid "Name"
-msgstr ""
+msgstr "Name"
-#: templates/admin/filer/folder/directory_table.html:23
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:29
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Owner"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Size"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Action"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
#, python-format
msgid "Change '%(item_label)s' folder details"
-msgstr ""
+msgstr "Change '%(item_label)s' folder details"
-#: templates/admin/filer/folder/directory_table.html:30
-#: templates/admin/filer/folder/directory_table.html:45
-msgid "Owner"
-msgstr "Uploaded by"
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s folder"
+msgstr[1] "%(counter)s folders"
-#: templates/admin/filer/folder/directory_table.html:37
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s file"
+msgstr[1] "%(counter)s files"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Change folder details"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Remove folder"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
msgid "Select this file"
-msgstr ""
+msgstr "Select this file"
-#: templates/admin/filer/folder/directory_table.html:39
-#: templates/admin/filer/folder/directory_table.html:43
-#: templates/admin/filer/folder/directory_table.html:44
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
#, python-format
msgid "Change '%(item_label)s' details"
-msgstr ""
+msgstr "Change '%(item_label)s' details"
-#: templates/admin/filer/folder/directory_table.html:42
-#, python-format
-msgid "Delete '%(item_label)s'"
-msgstr ""
-
-#: templates/admin/filer/folder/directory_table.html:42
-msgid "Delete"
-msgstr ""
-
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "Permissions"
-msgstr ""
+msgstr "Permissions"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "disabled"
-msgstr ""
+msgstr "disabled"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "enabled"
-msgstr ""
+msgstr "enabled"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Move selected files to clipboard"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, fuzzy, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Canonical url '%(item_label)s'"
+msgstr "Change '%(item_label)s' details"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, fuzzy, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Download '%(item_label)s'"
+msgstr "Change '%(item_label)s' details"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Remove file"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Drop files here or use the \"Upload Files\" button"
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Drop your file to upload into:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Upload"
-#: templates/admin/filer/folder/directory_table.html:50
-msgid "Move to clipboard"
-msgstr ""
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "cancel"
-#: templates/admin/filer/folder/directory_table.html:58
-msgid "there are no files or subfolders"
-msgstr ""
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Upload success!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Upload canceled!"
-#: templates/admin/filer/folder/directory_table.html:65
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
msgid "previous"
-msgstr ""
+msgstr "previous"
-#: templates/admin/filer/folder/directory_table.html:69
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
#, python-format
-msgid ""
-"\n"
-" Page %(number)s of %(num_pages)s.\n"
-" "
-msgstr ""
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Page %(number)s of %(num_pages)s."
-#: templates/admin/filer/folder/directory_table.html:75
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
msgid "next"
-msgstr ""
+msgstr "next"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Select all %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+#, fuzzy
+#| msgid "Select this file"
+msgid "Select all"
+msgstr "Select this file"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+#, fuzzy
+#| msgid "Filer"
+msgid "Files"
+msgstr "Filer"
#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
msgid "Add new"
+msgstr "Add new"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
msgstr ""
-#: templates/admin/filer/folder/new_folder_form.html:13
+#: templates/admin/filer/folder/new_folder_form.html:15
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Please correct the error below."
+msgstr[1] "Please correct the errors below."
-#: templates/admin/filer/folder/new_folder_form.html:28
+#: templates/admin/filer/folder/new_folder_form.html:30
msgid "Save"
-msgstr ""
+msgstr "Save"
-#: templates/admin/filer/image/change_form.html:21
-msgid "Full size preview"
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
msgstr ""
-#: templates/admin/filer/tools/search_form.html:8
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Search"
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
msgstr ""
-#: templates/admin/filer/tools/search_form.html:13
-msgid "Enter your search phrase here"
-msgstr ""
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Clipboard"
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Click here to"
-msgstr ""
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Paste all items here"
-#: templates/admin/filer/tools/search_form.html:14
-msgid "run search for entered phrase"
-msgstr ""
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Move all clipboard files to"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Empty Clipboard"
-#: templates/admin/filer/tools/search_form.html:15
-msgid "Check it to"
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "the clipboard is empty"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "upload failed"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
msgstr ""
-#: templates/admin/filer/tools/search_form.html:15
-#: templates/admin/filer/tools/search_form.html:16
-msgid "limit the search to current folder"
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
msgstr ""
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+#, fuzzy
+#| msgid "file missing"
+msgid "File is missing"
+msgstr "file missing"
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Type"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "File-size"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Modified"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Created"
+
+#: templates/admin/filer/tools/search_form.html:5
msgid "found"
-msgstr ""
+msgstr "found"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/search_form.html:5
msgid "and"
-msgstr ""
+msgstr "and"
-#: templates/admin/filer/tools/search_form.html:19
+#: templates/admin/filer/tools/search_form.html:7
msgid "cancel search"
-msgstr ""
+msgstr "cancel search"
-#: templates/admin/filer/tools/upload_button_js.html:24
-#: templates/admin/filer/widgets/admin_file.html:7
-#: templates/admin/filer/widgets/admin_file.html:8
-msgid "file missing"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Clear"
-#: templates/admin/filer/tools/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "or drop your file here"
-#: templates/admin/filer/tools/clipboard/clipboard.html:19
-msgid "Paste all items here"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "no file selected"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "discard"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Lookup"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "Move all clipboard files to"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Choose File"
-#: templates/admin/filer/tools/clipboard/clipboard.html:43
-msgid "the clipboard is empty"
-msgstr ""
+#: templates/admin/filer/widgets/admin_folder.html:16
+#, fuzzy
+#| msgid "Choose File"
+msgid "Choose Folder"
+msgstr "Choose File"
-#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:11
-msgid "upload failed"
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:11
-msgid "no file selected"
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:14
-#: templates/admin/filer/widgets/admin_file.html:15
-#: templates/admin/filer/widgets/admin_folder.html:7
-#: templates/admin/filer/widgets/admin_folder.html:8
-msgid "Lookup"
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:17
-#: templates/admin/filer/widgets/admin_folder.html:10
-msgid "Clear"
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
msgstr ""
-#: templates/admin/filer/widgets/admin_folder.html:5
-msgid "none selected"
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
msgstr ""
-#: templates/image_filer/folder.html:3
-#, python-format
-msgid "Folder '%(folder_label)s' files"
-msgstr ""
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
-#: templates/image_filer/folder.html:6
-msgid "File name"
-msgstr ""
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
-#: templates/image_filer/image_export_form.html:17
-msgid "export"
-msgstr ""
+#~ msgid "Open file"
+#~ msgstr "Open file"
-#: templates/image_filer/image_export_form.html:27
-msgid "download image"
-msgstr ""
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
-#: templates/image_filer/include/export_dialog.html:13
-msgid "Folder name already taken."
-msgstr ""
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
-#: templates/image_filer/include/export_dialog.html:15
-msgid "Submit"
-msgstr ""
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#, fuzzy
+#~| msgid "Subject location"
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/es/LC_MESSAGES/django.mo b/filer/locale/es/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..f11285aee
Binary files /dev/null and b/filer/locale/es/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/es/LC_MESSAGES/django.po b/filer/locale/es/LC_MESSAGES/django.po
new file mode 100644
index 000000000..cc42ddf61
--- /dev/null
+++ b/filer/locale/es/LC_MESSAGES/django.po
@@ -0,0 +1,1296 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Biel Frontera, 2023
+# Cristian Acevedo , 2016
+# David , 2015
+# Jason Gass Martinez , 2016
+# Luis Zárate , 2019
+# Manuel E. Gutierrez , 2013,2015
+# Manuel E. Gutierrez , 2013
+# Pablo, 2015
+# Pablo, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Biel Frontera, 2023\n"
+"Language-Team: Spanish (http://app.transifex.com/divio/django-filer/language/"
+"es/)\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
+"1 : 2;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr "No tienes autorización para subir ficheros. "
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+"No se ha encontrado la carpeta donde guardar el fichero. Por favor, refresca "
+"la página y vuelve a probar."
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+"No se puede utilizar esta carpeta: permiso denegado. Por favor, selecciona "
+"otra carpeta."
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "URL canónica"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Los elementos deben estar seleccionados para efectuar acciones sobre ellos. "
+"Ningún elemento ha sido modificado."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] " %(total_count)s seleccionado"
+msgstr[1] "Todos los %(total_count)s seleccionados"
+msgstr[2] "Todos los %(total_count)s seleccionados"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Listado de directorio para %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 de %(cnt)s seleccionados"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Ninguna acción seleccionada."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "%(count)d archivos movidos con éxito al clipboard."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Mover archivos selecionados al clipboard."
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Permisos para %(count)d ficheros deshabilitados con éxito."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Permisos para %(count)d ficheros habilitados con éxito."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Habilitar permisos para los archivos seleccionados."
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Deshabilitar permisos para los archivos seleccionados."
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "Eliminados %(count)d ficheros y/o directorios con éxito."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "No es posible eliminar ficheros y/o directorios"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "¿Estás seguro?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Eliminar ficheros y/o directorios"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Eliminar ficheros y/o directorios seleccionados"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Las carpetas con los nombres %s ya existen en el destino seleccionado"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Movidos con éxito %(count)d ficheros y/o directorios al directorio "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Mover ficheros y/o directorios"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Mover ficheros y/o directorios seleccionados"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "Cambiado el nombre de %(count)d archivos con éxito."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Cambiar el nombre de los archivos"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Copiados con éxito %(count)d ficheros y/o directorios al directorio "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Copiar ficheros y/o directorios"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Copiar ficheros y/o directorios seleccionados"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Cambiado correctamente el tamaño de %(count)d imágenes."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Cambiar el tamaño de imágenes."
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Cambiar el tamaño de imágenes seleccionadas."
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+"Sufijo que se añadirá al nombre de los archivos de los archivos copiados."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"El sufijo debe ser una parte válida de un nombre de fichero, simple y en "
+"minúsculas, como \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+"Formato de cambio de nombre con valor de clave \"%(key)s\" desconocido."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Formato de cambio de nombre no válido: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "opción de miniatura"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "ancho"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "alto"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "recortar"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "ampliar"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+"Se debe elegir una opción de miniatura o unos parámetros para el cambio de "
+"tamaño."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Localización del sujeto."
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Ubicación del tema principal en la escena. Formato \"x,y\""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Formato de la ubicación del tema inválido"
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "La ubicación del tema está fuera de la imagen"
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Tu entrada: \"{subject_location}\"."
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr "Quién"
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr "Qué"
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Ya existe un directorio con este nombre."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Biblioteca multimedia"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "texto alternativo por defecto"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "leyenda por defecto"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "localización del sujeto"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "imagen"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "imágenes"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "usuario"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "archivos"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "portapapeles"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "portapapeles"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "archivo"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "elemento del portapapeles"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "elementos del portapapeles"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "carpeta"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "tamaño del archivo"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "tiene todos los datos obligatorios"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "nombre del archivo original"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "nombre"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "descripción"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "propietario"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "subido a"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "modificado el"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Permisos desactivados"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Desactiva cualquier comprobación de permiso para este archivo. El archivo "
+"será accesible públicamente para todos."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr "Padre"
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "creado el"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Carpeta"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Carpetas"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "todos los elementos"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "sólo este elemento"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "este elemento y todos los hijos"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr "hereda"
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "permitir"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "denegar"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "tipo"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "grupo"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "todos"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "puede leer"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "puede editar"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "puede añadir hijos"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "permiso de la carpeta"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "permisos de la carpeta"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+"La carpeta no se puede seleccionar con el tipo \"todos los elementos\"."
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+"La carpeta se tiene que seleccionar cuando el tipo no es \"todos los "
+"elementos\"."
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr "Usuario y grupo no se pueden seleccionar a la vez con \"todos\"."
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr "Al menos se debe seleccionar un usuario, un grupo o \"todos\"."
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr "Todas las carpetas"
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr "Path lógico"
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr "Usuario: {user}"
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr "Grupo: {group}"
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr "Todos"
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr "Editar"
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr "Leer"
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr "Añadir hijos"
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "fecha"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "siempre debes dar crédito al autor"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "siempre debes publicar los derechos de autor"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "Ancho en pixel."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "Alto en pixel."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "Opciones de miniatura"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Subidas desordenadas"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "archivos con metadatos perdidos"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "raíz"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr "Muestra la vista de tabla"
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr "Muestra la vista de miniaturas"
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Ejecutar la acción seleccionada"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Continuar"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+"Haz clic aquí para seleccionar los objetos a través de todas las páginas"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Seleccionar los %(total_count)s archivos y/o carpetas"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Limpiar la selección"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Volver a la página de inicio de admin"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Inicio"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Volver a la app Filer"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Volver a la carpeta raíz"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Volver a la carpeta '%(folder_name)s'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplicados"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Borrar los archivos y/o carpetas seleccionados borraría los objetos "
+"seleccionados, pero tu cuenta no tiene permiso para borrar los siguientes "
+"tipos de objetos:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Borrar los archivos y/o carpetas requeriría borrar los siguientes objetos "
+"relacionados protegidos:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"¿Estás seguro de que quieres borrar los archivos y/o carpetas seleccionados? "
+"Los siguientes objetos y sus elementos relacionados serán borrados:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "No, ir atrás"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Sí, estoy seguro"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Histórico"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Ver en la página"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Volver a"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "página de inicio de la administración"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Icono de la Carpeta"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+"Tu cuenta no tiene permisos para copiar todos los archivos y/o carpetas "
+"seleccionados."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Volver atrás"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "No hay carpetas de destino disponibles."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "No hay archivos y/o carpetas disponibles para copiar."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Los siguientes archivos y/o carpetas serán copiados a una carpeta de destino "
+"(manteniendo su estructura en árbol):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Carpeta de destino:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Copiar"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "No está permitido copiar los archivos dentro de la misma carpeta"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+"Tu cuenta no tiene permisos para cambiar el tamaño de todas las imágenes "
+"seleccionadas."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "No hay imágenes disponibles a las que cambiarles el tamaño."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Se les cambiará el tamaño a las siguientes imágenes:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Elige una opción de miniatura existente o introduce parámetros para el "
+"cambio de tamaño:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Aviso: se cambiará el tamaño de las imágenes en el mismo sitio y los "
+"originales se perderán. Considera realizar una copia de aquellas para "
+"conservar los originales."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Cambiar de tamaño"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Tu cuenta no tiene permisos para mover todos los archivos y/o carpetas "
+"seleccionados."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "No hay archivos y/o carpetas disponibles para mover."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Los siguientes archivos y/o directorios serán movidos a una carpeta de "
+"destino (manteniendo su estructura de árbol):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Mover"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "No está permitido mover los archivos dentro de la misma carpeta"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+"Tu cuenta no tiene permisos para renombrar todos los objetos seleccionados."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "No hay archivos disponibles a los que cambiar el nombre."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"Los siguientes archivos serán renombrados (se quedarán en sus carpetas y "
+"mantendrán su nombre original, solo los nombres mostrados serán cambiados):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Cambiar el nombre"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Volver a la carpeta padre"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Cambiar los detalles de la carpeta actual"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Cambiar"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Haz clic para correr la búsqueda del texto ingresado"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Buscar"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Cerrar"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limite"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Comprueba el límite de búsqueda en la carpeta actual"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Limitar busqueda a la carpeta actual"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Borrar"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Añade una nueva Carpeta"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Carpeta Nueva"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Subir archivos."
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Tiene que seleccionar primero una carpeta"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Nombre"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Propietario"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Tamaño"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Acción"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Cambiar los detalles de la carpeta '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s carpeta"
+msgstr[1] "%(counter)s carpetas"
+msgstr[2] "%(counter)s carpetas"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s archivo"
+msgstr[1] "%(counter)s archivos"
+msgstr[2] "%(counter)s archivos"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Cambiar los detalles de la carpeta"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Eliminar carpeta"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Seleccionar este archivo"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Cambiar los detalles de '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Permisos"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "desactivado"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "activado"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Mover archivos selecionados al clipboard."
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "Url canónica '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Descargar '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Eliminar archivo"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Suelta los archivos aquí o usa el botón \"Subir archivos\""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Suelta el archivo a subir dentro:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Subir"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "cancelar"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Subida exitosa!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Subida cancelada!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "anterior"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Página %(number)s de %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "siguiente"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Seleccionar todo %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr "Selecciona todas"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr "Ficheros"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Añadir nuevo"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Sitio administrativo de Django"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Por favor, corrige el error indicado abajo."
+msgstr[1] "Por favor, corrige los errores indicados abajo."
+msgstr[2] "Por favor, corrige los errores indicados abajo."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Guardar"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr "El navegador no soporta audio."
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr "El navegador no soporta vídeo."
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Portapapeles"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Pegar aquí todos los elementos"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Mover todos los archivos del portapapeles a"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Portapapeles vacío"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "el portapapeles está vacío"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "fallo en la subida"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr "Descarga"
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr "Expande"
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr "Fichero no encontrado"
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Tipo"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Tamaño del archivo"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Modificado"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Creado"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "encontrado"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "y"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "cancelar la búsqueda"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Limpiar"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "o suelta aquí tu archivo"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "ningún archivo seleccionado"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Buscar"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Selecciona el archivo"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr "Escoge una carpeta"
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+"Fichero \"{file_name}\": carga denegada por políticas de seguridad del sitio "
+"web"
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+"Fichero \"{file_name}\": carga del tipo {file_type} denegada por políticas "
+"de seguridad del sitio web"
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+"Fichero \"{file_name}\": carga de HTML denegada por políticas de seguridad "
+"del sitio web"
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+"Fichero \"{file_name}\": rechazado por posible vulnerabilidad XSS (Cross-"
+"site scripting)"
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/et/LC_MESSAGES/django.mo b/filer/locale/et/LC_MESSAGES/django.mo
index 982b54f44..6f688e0c0 100644
Binary files a/filer/locale/et/LC_MESSAGES/django.mo and b/filer/locale/et/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/et/LC_MESSAGES/django.po b/filer/locale/et/LC_MESSAGES/django.po
index ba48e6a20..44b47474a 100644
--- a/filer/locale/et/LC_MESSAGES/django.po
+++ b/filer/locale/et/LC_MESSAGES/django.po
@@ -3,483 +3,623 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Translators:
+# Translators:
+# Johan Viirok, 2022
+# Martin , 2016
+# Rivo Zängov , 2013
msgid ""
msgstr ""
-"Project-Id-Version: django-filer\n"
+"Project-Id-Version: django Filer\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-07-13 19:10+0200\n"
-"PO-Revision-Date: 2012-09-03 20:11+0100\n"
-"Last-Translator: Stefan Foulis \n"
-"Language-Team: Estonian (http://www.transifex.com/projects/p/django-filer/"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Johan Viirok, 2022\n"
+"Language-Team: Estonian (http://app.transifex.com/divio/django-filer/"
"language/et/)\n"
+"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: et\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: views.py:103
-msgid "Folder with this name already exists."
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
msgstr ""
-#: admin/fileadmin.py:41
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
msgid "Advanced"
msgstr ""
-#: admin/folderadmin.py:324 admin/folderadmin.py:427
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
msgid ""
"Items must be selected in order to perform actions on them. No items have "
"been changed."
msgstr ""
-#: admin/folderadmin.py:344
+#: admin/folderadmin.py:434
#, python-format
msgid "%(total_count)s selected"
msgid_plural "All %(total_count)s selected"
msgstr[0] ""
msgstr[1] ""
-#: admin/folderadmin.py:377
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
#, python-format
msgid "0 of %(cnt)s selected"
msgstr ""
-#: admin/folderadmin.py:456
+#: admin/folderadmin.py:612
msgid "No action selected."
-msgstr ""
+msgstr "Ühtegi tegevust pole valitud."
-#: admin/folderadmin.py:497
+#: admin/folderadmin.py:664
#, python-format
msgid "Successfully moved %(count)d files to clipboard."
msgstr ""
-#: admin/folderadmin.py:503
+#: admin/folderadmin.py:669
msgid "Move selected files to clipboard"
msgstr ""
-#: admin/folderadmin.py:537
+#: admin/folderadmin.py:709
#, python-format
msgid "Successfully disabled permissions for %(count)d files."
msgstr ""
-#: admin/folderadmin.py:541
+#: admin/folderadmin.py:711
#, python-format
msgid "Successfully enabled permissions for %(count)d files."
msgstr ""
-#: admin/folderadmin.py:550
+#: admin/folderadmin.py:719
msgid "Enable permissions for selected files"
msgstr ""
-#: admin/folderadmin.py:555
+#: admin/folderadmin.py:725
msgid "Disable permissions for selected files"
msgstr ""
-#: admin/folderadmin.py:623
+#: admin/folderadmin.py:789
#, python-format
msgid "Successfully deleted %(count)d files and/or folders."
msgstr ""
-#: admin/folderadmin.py:630
+#: admin/folderadmin.py:794
msgid "Cannot delete files and/or folders"
msgstr ""
-#: admin/folderadmin.py:632
+#: admin/folderadmin.py:796
msgid "Are you sure?"
-msgstr ""
+msgstr "Oled sa kindel?"
-#: admin/folderadmin.py:637
+#: admin/folderadmin.py:802
msgid "Delete files and/or folders"
-msgstr ""
+msgstr "Kustuta failid ja/või kaustad"
-#: admin/folderadmin.py:656
+#: admin/folderadmin.py:823
msgid "Delete selected files and/or folders"
+msgstr "Kustuta valitud failid ja/või kaustad"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
msgstr ""
-#: admin/folderadmin.py:771
+#: admin/folderadmin.py:934
#, python-format
msgid ""
"Successfully moved %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
-#: admin/folderadmin.py:778 admin/folderadmin.py:780
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
msgid "Move files and/or folders"
msgstr ""
-#: admin/folderadmin.py:797
+#: admin/folderadmin.py:959
msgid "Move selected files and/or folders"
msgstr ""
-#: admin/folderadmin.py:854
+#: admin/folderadmin.py:1016
#, python-format
msgid "Successfully renamed %(count)d files."
msgstr ""
-#: admin/folderadmin.py:862 admin/folderadmin.py:864 admin/folderadmin.py:881
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
msgid "Rename files"
-msgstr ""
+msgstr "Nimeta failid ümber"
-#: admin/folderadmin.py:975
+#: admin/folderadmin.py:1137
#, python-format
msgid ""
"Successfully copied %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
-#: admin/folderadmin.py:989 admin/folderadmin.py:991
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
msgid "Copy files and/or folders"
msgstr ""
-#: admin/folderadmin.py:1010
+#: admin/folderadmin.py:1174
msgid "Copy selected files and/or folders"
msgstr ""
-#: admin/folderadmin.py:1105
+#: admin/folderadmin.py:1279
#, python-format
msgid "Successfully resized %(count)d images."
msgstr ""
-#: admin/folderadmin.py:1113 admin/folderadmin.py:1115
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
msgid "Resize images"
msgstr ""
-#: admin/folderadmin.py:1133
+#: admin/folderadmin.py:1303
msgid "Resize selected images"
msgstr ""
-#: admin/forms.py:26
+#: admin/forms.py:24
msgid "Suffix which will be appended to filenames of copied files."
msgstr ""
-#: admin/forms.py:33
+#: admin/forms.py:31
#, python-format
msgid ""
"Suffix should be a valid, simple and lowercase filename part, like "
"\"%(valid)s\"."
msgstr ""
-#: admin/forms.py:54
+#: admin/forms.py:52
#, python-format
msgid "Unknown rename format value key \"%(key)s\"."
msgstr ""
-#: admin/forms.py:56
+#: admin/forms.py:54
#, python-format
msgid "Invalid rename format: %(error)s."
msgstr ""
-#: admin/forms.py:62
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
msgid "thumbnail option"
-msgstr ""
+msgstr "pisipildi valikud"
-#: admin/forms.py:63
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
msgid "width"
-msgstr ""
+msgstr "laius"
-#: admin/forms.py:64
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
msgid "height"
-msgstr ""
+msgstr "kõrgus"
-#: admin/forms.py:65
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
msgid "crop"
-msgstr ""
+msgstr "lõika"
-#: admin/forms.py:66
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
msgid "upscale"
-msgstr ""
+msgstr "suurenda"
-#: admin/forms.py:71
+#: admin/forms.py:79
msgid "Thumbnail option or resize parameters must be choosen."
msgstr ""
-#: admin/forms.py:73
-msgid "Resize parameters must be choosen."
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
msgstr ""
-#: admin/imageadmin.py:12
-msgid "Subject location"
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
msgstr ""
-#: admin/imageadmin.py:13
-msgid "Location of the main subject of the scene."
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
msgstr ""
-#: models/clipboardmodels.py:9 models/foldermodels.py:236
-msgid "user"
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
msgstr ""
-#: models/clipboardmodels.py:11 models/filemodels.py:287
-msgid "files"
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
msgstr ""
-#: models/clipboardmodels.py:34 models/clipboardmodels.py:40
-msgid "clipboard"
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
msgstr ""
-#: models/clipboardmodels.py:35
-msgid "clipboards"
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
msgstr ""
-#: models/clipboardmodels.py:39 models/filemodels.py:35
-#: models/filemodels.py:286
-msgid "file"
+#: admin/views.py:55
+msgid "Folder with this name already exists."
msgstr ""
-#: models/clipboardmodels.py:44
-msgid "clipboard item"
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
msgstr ""
-#: models/clipboardmodels.py:45
-msgid "clipboard items"
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "pilt"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "pildid"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
msgstr ""
-#: models/filemodels.py:33 templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "kasutaja"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "failid"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "lõikalaud"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "lõikelauad"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "fail"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "lõikelaua kirje"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "lõikelaua kirjed"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
#: templates/admin/filer/folder/new_folder_form.html:4
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
msgid "folder"
-msgstr ""
+msgstr "kaust"
-#: models/filemodels.py:36
+#: models/filemodels.py:81
msgid "file size"
-msgstr ""
+msgstr "failisuurus"
-#: models/filemodels.py:38
+#: models/filemodels.py:87
msgid "sha1"
-msgstr ""
+msgstr "sha1"
-#: models/filemodels.py:40
+#: models/filemodels.py:94
msgid "has all mandatory data"
msgstr ""
-#: models/filemodels.py:42
+#: models/filemodels.py:100
msgid "original filename"
-msgstr ""
+msgstr "algne failinimi"
-#: models/filemodels.py:44 models/foldermodels.py:99
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
msgid "name"
-msgstr ""
+msgstr "nimi"
-#: models/filemodels.py:46
+#: models/filemodels.py:116
msgid "description"
-msgstr ""
+msgstr "kirjeldus"
-#: models/filemodels.py:50
+#: models/filemodels.py:125 models/foldermodels.py:108
msgid "owner"
-msgstr ""
+msgstr "omanik"
-#: models/filemodels.py:52 models/foldermodels.py:105
+#: models/filemodels.py:129 models/foldermodels.py:116
msgid "uploaded at"
-msgstr ""
+msgstr "üles laaditud"
-#: models/filemodels.py:53 models/foldermodels.py:108
+#: models/filemodels.py:134 models/foldermodels.py:126
msgid "modified at"
-msgstr ""
+msgstr "muudetud"
-#: models/filemodels.py:57
+#: models/filemodels.py:140
msgid "Permissions disabled"
msgstr ""
-#: models/filemodels.py:58
-msgid "Disable any permission checking for this "
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
msgstr ""
-#: models/foldermodels.py:107
+#: models/foldermodels.py:121
msgid "created at"
-msgstr ""
+msgstr "loodud"
-#: models/foldermodels.py:211
-#: templates/admin/filer/widgets/admin_folder.html:3
-#: templates/admin/filer/widgets/admin_folder.html:5
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Folder"
-msgstr ""
+msgstr "Kaust"
-#: models/foldermodels.py:212
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
msgid "Folders"
-msgstr ""
+msgstr "Kaustad"
-#: models/foldermodels.py:227
+#: models/foldermodels.py:260
msgid "all items"
-msgstr ""
+msgstr "kõik kirjed"
-#: models/foldermodels.py:228
+#: models/foldermodels.py:261
msgid "this item only"
-msgstr ""
+msgstr "ainult see kirje"
-#: models/foldermodels.py:229
+#: models/foldermodels.py:262
msgid "this item and all children"
+msgstr "see kirje ja kõik alamkirjed"
+
+#: models/foldermodels.py:266
+msgid "inherit"
msgstr ""
-#: models/foldermodels.py:233
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "luba"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "keeldu"
+
+#: models/foldermodels.py:280
msgid "type"
-msgstr ""
+msgstr "tüüp"
-#: models/foldermodels.py:239
+#: models/foldermodels.py:297
msgid "group"
-msgstr ""
+msgstr "grupp"
-#: models/foldermodels.py:240
+#: models/foldermodels.py:304
msgid "everybody"
-msgstr ""
+msgstr "kõik"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "saab lugeda"
-#: models/foldermodels.py:242
+#: models/foldermodels.py:317
msgid "can edit"
+msgstr "saab mutua"
+
+#: models/foldermodels.py:325
+msgid "can add children"
msgstr ""
-#: models/foldermodels.py:243
-msgid "can read"
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "kausta õigus"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "kausta õigused"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
msgstr ""
-#: models/foldermodels.py:244
-msgid "can add children"
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
msgstr ""
-#: models/foldermodels.py:273
-msgid "folder permission"
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
msgstr ""
-#: models/foldermodels.py:274
-msgid "folder permissions"
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
msgstr ""
-#: models/imagemodels.py:39
-msgid "date taken"
+#: models/foldermodels.py:360
+msgid "All Folders"
msgstr ""
-#: models/imagemodels.py:42
-msgid "default alt text"
+#: models/foldermodels.py:362
+msgid "Logical Path"
msgstr ""
-#: models/imagemodels.py:43
-msgid "default caption"
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
msgstr ""
-#: models/imagemodels.py:45 templates/image_filer/image.html:6
-msgid "author"
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
msgstr ""
-#: models/imagemodels.py:47
-msgid "must always publish author credit"
+#: models/foldermodels.py:375
+msgid "Everybody"
msgstr ""
-#: models/imagemodels.py:48
-msgid "must always publish copyright"
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
msgstr ""
-#: models/imagemodels.py:50
-msgid "subject location"
+#: models/foldermodels.py:389
+msgid "Read"
msgstr ""
-#: models/imagemodels.py:200
-msgid "image"
+#: models/foldermodels.py:390
+msgid "Add children"
msgstr ""
-#: models/imagemodels.py:201
-msgid "images"
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
msgstr ""
-#: models/virtualitems.py:45
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "unfiled files"
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
msgstr ""
-#: models/virtualitems.py:59
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "laius pikslites"
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "kõrgus pikslites"
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
msgid "files with missing metadata"
msgstr ""
-#: models/virtualitems.py:73 templates/admin/filer/breadcrumbs.html:6
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:10
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
msgid "root"
msgstr ""
-#: templates/admin/filer/actions.html:4
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
msgid "Run the selected action"
msgstr ""
-#: templates/admin/filer/actions.html:4
+#: templates/admin/filer/actions.html:5
msgid "Go"
-msgstr ""
+msgstr "Mine"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
msgid "Click here to select the objects across all pages"
msgstr ""
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
#, python-format
msgid "Select all %(total_count)s files and/or folders"
msgstr ""
-#: templates/admin/filer/actions.html:13
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
msgid "Clear selection"
-msgstr ""
+msgstr "Tühista valik"
#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
msgid "Go back to admin homepage"
msgstr ""
#: templates/admin/filer/breadcrumbs.html:4
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
msgid "Home"
-msgstr ""
+msgstr "Koduleht"
#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
msgid "Go back to Filer app"
msgstr ""
-#: templates/admin/filer/breadcrumbs.html:5
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/image_filer/image_export_form.html:8
-msgid "Filer"
-msgstr ""
-
#: templates/admin/filer/breadcrumbs.html:6
-#: templates/image_filer/image_export_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Go back to root folder"
-msgstr ""
+msgstr "Tagasi peakausta"
#: templates/admin/filer/breadcrumbs.html:8
-#: templates/admin/filer/breadcrumbs.html:11
-#: templates/admin/filer/folder/change_form.html:11
-#: templates/image_filer/image_export_form.html:12
-#: templates/image_filer/image_export_form.html:14
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
#, python-format
msgid "Go back to '%(folder_name)s' folder"
msgstr ""
-#: templates/admin/filer/change_form.html:28
-msgid "duplicates"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:13
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the "
-"following protected related objects:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:29
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:34
-#: templates/admin/filer/delete_selected_files_confirmation.html:45
-msgid "Yes, I'm sure"
-msgstr ""
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplikaadid"
#: templates/admin/filer/delete_selected_files_confirmation.html:11
msgid ""
@@ -500,386 +640,588 @@ msgid ""
"the following objects and their related items will be deleted:"
msgstr ""
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:7
-#: templates/image_filer/image_export_form.html:8
-#: templates/image_filer/image_export_form.html:16
-msgid "Go back to"
-msgstr ""
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Ei, vii mind tagasi"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
-msgid "admin homepage"
-msgstr ""
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Jah, olen kindel"
-#: templates/admin/filer/folder/change_form.html:22
-#: templates/admin/filer/image/change_form.html:9
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
msgid "History"
-msgstr ""
+msgstr "Ajalugu"
+#: templates/admin/filer/file/change_form.html:37
#: templates/admin/filer/folder/change_form.html:23
-#: templates/admin/filer/image/change_form.html:10
+#: templates/admin/filer/image/change_form.html:37
msgid "View on site"
-msgstr ""
+msgstr "Vaata saidil"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Mine tagasi"
-#: templates/admin/filer/folder/change_form.html:35
-#: templates/admin/filer/folder/directory_listing.html:75
-#: templates/admin/filer/folder/directory_listing.html:85
-#: templates/admin/filer/folder/directory_table.html:23
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "admini koduleht"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
msgid "Folder Icon"
-msgstr ""
+msgstr "Kausta ikoon"
-#: templates/admin/filer/folder/choose_copy_destination.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:23
msgid ""
"Your account doesn't have permissions to copy all of the selected files and/"
"or folders."
msgstr ""
-#: templates/admin/filer/folder/choose_copy_destination.html:15
-#: templates/admin/filer/folder/choose_move_destination.html:15
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
msgid "There are no destination folders available."
msgstr ""
-#: templates/admin/filer/folder/choose_copy_destination.html:18
+#: templates/admin/filer/folder/choose_copy_destination.html:35
msgid "There are no files and/or folders available to copy."
msgstr ""
-#: templates/admin/filer/folder/choose_copy_destination.html:20
+#: templates/admin/filer/folder/choose_copy_destination.html:40
msgid ""
"The following files and/or folders will be copied to a destination folder "
"(retaining their tree structure):"
msgstr ""
-#: templates/admin/filer/folder/choose_copy_destination.html:32
-#: templates/admin/filer/folder/choose_move_destination.html:32
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
msgid "Destination folder:"
msgstr ""
-#: templates/admin/filer/folder/choose_copy_destination.html:39
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
msgid "Copy"
+msgstr "Kopeeri"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
msgstr ""
-#: templates/admin/filer/folder/choose_images_resize_options.html:12
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
msgid ""
"Your account doesn't have permissions to resize all of the selected images."
msgstr ""
-#: templates/admin/filer/folder/choose_images_resize_options.html:15
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
msgid "There are no images available to resize."
msgstr ""
-#: templates/admin/filer/folder/choose_images_resize_options.html:17
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
msgid "The following images will be resized:"
msgstr ""
-#: templates/admin/filer/folder/choose_images_resize_options.html:30
-msgid "Choose an existing thumbnail option or enter resize parameters:"
-msgstr ""
-
#: templates/admin/filer/folder/choose_images_resize_options.html:32
-msgid "Choose resize parameters:"
+msgid "Choose an existing thumbnail option or enter resize parameters:"
msgstr ""
-#: templates/admin/filer/folder/choose_images_resize_options.html:35
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
msgid ""
"Warning: Images will be resized in-place and originals will be lost. Maybe "
"first make a copy of them to retain the originals."
msgstr ""
-#: templates/admin/filer/folder/choose_images_resize_options.html:36
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
msgid "Resize"
-msgstr ""
+msgstr "Muuda suurust"
-#: templates/admin/filer/folder/choose_move_destination.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:35
msgid ""
"Your account doesn't have permissions to move all of the selected files and/"
"or folders."
msgstr ""
-#: templates/admin/filer/folder/choose_move_destination.html:18
+#: templates/admin/filer/folder/choose_move_destination.html:47
msgid "There are no files and/or folders available to move."
msgstr ""
-#: templates/admin/filer/folder/choose_move_destination.html:20
+#: templates/admin/filer/folder/choose_move_destination.html:52
msgid ""
"The following files and/or folders will be moved to a destination folder "
"(retaining their tree structure):"
msgstr ""
-#: templates/admin/filer/folder/choose_move_destination.html:38
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
msgid "Move"
+msgstr "Liiguta"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
msgstr ""
-#: templates/admin/filer/folder/choose_rename_format.html:12
+#: templates/admin/filer/folder/choose_rename_format.html:15
msgid ""
"Your account doesn't have permissions to rename all of the selected files."
msgstr ""
-#: templates/admin/filer/folder/choose_rename_format.html:15
+#: templates/admin/filer/folder/choose_rename_format.html:18
msgid "There are no files available to rename."
msgstr ""
-#: templates/admin/filer/folder/choose_rename_format.html:17
+#: templates/admin/filer/folder/choose_rename_format.html:20
msgid ""
"The following files will be renamed (they will stay in their folders and "
"keep original filename, only displayed filename will be changed):"
msgstr ""
-#: templates/admin/filer/folder/choose_rename_format.html:54
+#: templates/admin/filer/folder/choose_rename_format.html:59
msgid "Rename"
-msgstr ""
+msgstr "Nimeta ümber"
-#: templates/admin/filer/folder/directory_listing.html:66
-msgid "Adds a new Folder"
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Mine tagasi peamisesse kausta"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
msgstr ""
-#: templates/admin/filer/folder/directory_listing.html:66
-#: templates/image_filer/include/export_dialog.html:34
-msgid "New Folder"
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Muuda"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
msgstr ""
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "upload files"
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Otsi"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Sulge"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
msgstr ""
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "Upload"
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
msgstr ""
-#: templates/admin/filer/folder/directory_listing.html:74
-msgid "Go back to the parent folder"
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
msgstr ""
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:18
-#, python-format
-msgid "1 folder"
-msgid_plural "%(counter)s folders"
-msgstr[0] ""
-msgstr[1] ""
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Kustuta"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:19
-#, python-format
-msgid "1 file"
-msgid_plural "%(counter)s files"
-msgstr[0] ""
-msgstr[1] ""
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Lisab uue kausta"
-#: templates/admin/filer/folder/directory_listing.html:80
-msgid "Change current folder details"
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Uus kaust"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
msgstr ""
-#: templates/admin/filer/folder/directory_listing.html:80
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:43
-msgid "Change"
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
msgstr ""
-#: templates/admin/filer/folder/directory_table.html:13
+#: templates/admin/filer/folder/directory_table_list.html:16
msgid "Name"
+msgstr "Nimi"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Omanik"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Suurus"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
msgstr ""
-#: templates/admin/filer/folder/directory_table.html:23
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:29
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
#, python-format
msgid "Change '%(item_label)s' folder details"
msgstr ""
-#: templates/admin/filer/folder/directory_table.html:30
-#: templates/admin/filer/folder/directory_table.html:45
-msgid "Owner"
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s kaust"
+msgstr[1] "%(counter)s kausta"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s fail"
+msgstr[1] "%(counter)s faili"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
msgstr ""
-#: templates/admin/filer/folder/directory_table.html:37
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Eemalda kaust"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
msgid "Select this file"
-msgstr ""
+msgstr "Vali see fail"
-#: templates/admin/filer/folder/directory_table.html:39
-#: templates/admin/filer/folder/directory_table.html:43
-#: templates/admin/filer/folder/directory_table.html:44
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
#, python-format
msgid "Change '%(item_label)s' details"
msgstr ""
-#: templates/admin/filer/folder/directory_table.html:42
-#, python-format
-msgid "Delete '%(item_label)s'"
-msgstr ""
-
-#: templates/admin/filer/folder/directory_table.html:42
-msgid "Delete"
-msgstr ""
-
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "Permissions"
-msgstr ""
+msgstr "Õigused"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "disabled"
-msgstr ""
+msgstr "välja lülitatud"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "enabled"
+msgstr "sisse lülitatud"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
msgstr ""
-#: templates/admin/filer/folder/directory_table.html:50
-msgid "Move to clipboard"
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Lae alla '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Eemalda fail"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
msgstr ""
-#: templates/admin/filer/folder/directory_table.html:58
-msgid "there are no files or subfolders"
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
msgstr ""
-#: templates/admin/filer/folder/directory_table.html:65
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Laadi üles"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "tühista"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Üleslaadimine õnnestus!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Üleslaadimine tühistatud!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
msgid "previous"
-msgstr ""
+msgstr "eelmine"
-#: templates/admin/filer/folder/directory_table.html:69
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
#, python-format
-msgid ""
-"\n"
-" Page %(number)s of %(num_pages)s.\n"
-" "
-msgstr ""
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Lehekülg %(number)s / %(num_pages)s."
-#: templates/admin/filer/folder/directory_table.html:75
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
msgid "next"
+msgstr "järgmine"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Vali kõik %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
msgstr ""
#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
msgid "Add new"
+msgstr "Lisa uus"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
msgstr ""
-#: templates/admin/filer/folder/new_folder_form.html:13
+#: templates/admin/filer/folder/new_folder_form.html:15
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
msgstr[0] ""
msgstr[1] ""
-#: templates/admin/filer/folder/new_folder_form.html:28
+#: templates/admin/filer/folder/new_folder_form.html:30
msgid "Save"
-msgstr ""
+msgstr "Salvesta"
-#: templates/admin/filer/image/change_form.html:21
-msgid "Full size preview"
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
msgstr ""
-#: templates/admin/filer/tools/search_form.html:8
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Search"
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
msgstr ""
-#: templates/admin/filer/tools/search_form.html:13
-msgid "Enter your search phrase here"
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Lõikelaud"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
msgstr ""
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Click here to"
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
msgstr ""
-#: templates/admin/filer/tools/search_form.html:14
-msgid "run search for entered phrase"
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Tühjenda lõikelaud"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "lõikelaud on tühi"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "üleslaadimine ebaõnnestus"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
msgstr ""
-#: templates/admin/filer/tools/search_form.html:15
-msgid "Check it to"
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
msgstr ""
-#: templates/admin/filer/tools/search_form.html:15
-#: templates/admin/filer/tools/search_form.html:16
-msgid "limit the search to current folder"
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
msgstr ""
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Tüüp"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Faili suurus"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Muudetud"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Loodud"
+
+#: templates/admin/filer/tools/search_form.html:5
msgid "found"
-msgstr ""
+msgstr "leitud"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/search_form.html:5
msgid "and"
-msgstr ""
+msgstr "ja"
-#: templates/admin/filer/tools/search_form.html:19
+#: templates/admin/filer/tools/search_form.html:7
msgid "cancel search"
-msgstr ""
+msgstr "tühista otsing"
-#: templates/admin/filer/tools/upload_button_js.html:24
-#: templates/admin/filer/widgets/admin_file.html:7
-#: templates/admin/filer/widgets/admin_file.html:8
-msgid "file missing"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Tühjenda"
-#: templates/admin/filer/tools/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "või lohista fail siia"
-#: templates/admin/filer/tools/clipboard/clipboard.html:19
-msgid "Paste all items here"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "ühtegi faili pole valitud"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "discard"
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
msgstr ""
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "Move all clipboard files to"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Vali fail"
-#: templates/admin/filer/tools/clipboard/clipboard.html:43
-msgid "the clipboard is empty"
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
msgstr ""
-#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:11
-msgid "upload failed"
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:11
-msgid "no file selected"
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:14
-#: templates/admin/filer/widgets/admin_file.html:15
-#: templates/admin/filer/widgets/admin_folder.html:7
-#: templates/admin/filer/widgets/admin_folder.html:8
-msgid "Lookup"
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:17
-#: templates/admin/filer/widgets/admin_folder.html:10
-msgid "Clear"
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
msgstr ""
-#: templates/admin/filer/widgets/admin_folder.html:5
-msgid "none selected"
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
msgstr ""
-#: templates/image_filer/folder.html:3
-#, python-format
-msgid "Folder '%(folder_label)s' files"
-msgstr ""
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
-#: templates/image_filer/folder.html:6
-msgid "File name"
-msgstr ""
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
-#: templates/image_filer/image_export_form.html:17
-msgid "export"
-msgstr ""
+#~ msgid "Open file"
+#~ msgstr "Open file"
-#: templates/image_filer/image_export_form.html:27
-msgid "download image"
-msgstr ""
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
-#: templates/image_filer/include/export_dialog.html:13
-msgid "Folder name already taken."
-msgstr ""
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
-#: templates/image_filer/include/export_dialog.html:15
-msgid "Submit"
-msgstr ""
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/eu/LC_MESSAGES/django.mo b/filer/locale/eu/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..0c1dfafb6
Binary files /dev/null and b/filer/locale/eu/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/eu/LC_MESSAGES/django.po b/filer/locale/eu/LC_MESSAGES/django.po
new file mode 100644
index 000000000..a28a55d23
--- /dev/null
+++ b/filer/locale/eu/LC_MESSAGES/django.po
@@ -0,0 +1,1241 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Ales Zabala Alava , 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Ales Zabala Alava , 2013\n"
+"Language-Team: Basque (http://app.transifex.com/divio/django-filer/language/"
+"eu/)\n"
+"Language: eu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Aurreratua"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Elementuak hautatu behar dira beraiekin zeozer egiteko. Ez da elementurik "
+"aldatu."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "bat haututa"
+msgstr[1] "%(total_count)s hautatuta"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "%(cnt)s-(e)tik 0 hautatuta"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Ez da ekintzarik hautatu"
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "%(count)d fitxategi arbelera mugituta."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Hautatutako fitxategiak arbelara mugitu"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "%(count)d fitxategientzako baimenak ezgaituta."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "%(count)d fitxategientzako baimenak gaituta."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Hautatutako fitxategientzako baimenak gaitu"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Hautatutako fitxategientzako baimenak ezgaitu"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "%(count)d fitxategi eta/edo karpeta ezabatuta."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Ezin dira fitxategia eta/edo karpetak ezabatu"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Ziur zaude?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Ezabatu fitxategi eta/edo karpetak"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Ezabatu hautatutako fitxategi eta/edo karpetak"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"%(count)d fitxategi eta/edo karpeta '%(destination)s' karpetara mugituta."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Fitxategi eta/edo karpetak mugitu"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Hautatutako fitxategi eta/edo karpetak mugitu"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "%(count)d fitxategi berrizendatuta."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Fitxategiak berrizendatu"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"%(count)d fitxategi eta/edo karpeta %(destination)s karpetara kopiatuta."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Fitxategi eta/edo karpetak kopiatu"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Hautatutako fitxategi eta/edo karpetak kopiatu"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "%(count)d irudien tamaina aldatuta."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Irudien tamaina aldatu"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Hautatutako irudien tamaina aldatu"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Kopiatutako fitxategiei gehituko zaien atzizkia."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Atzizkia baliozko, sinple eta letra xehetan dagoen fitxategi izen zatia izan "
+"beharko luke, \"%(valid)s\" bezala."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Berrizendatze formatuko gako balio ezezaguna \"%(key)s\"."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Berrizendatze formatu okerra: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "argazkitxoaren aukerak"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "zabalera"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "altuera"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "moztu"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "handitu"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+"Argazkitxo aukerak edo tamaina aldatzeko parametroak zehaztu behar dira."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Subjektuaren kokapena"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Izen honetako karpeta badago."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "defektuzko testu alternatiboa"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "defektuzko epigrafea"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "subjektuaren kokapena"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "irudia"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "irudiak"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "erabiltzailea"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "fitxategiak"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "arbela"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "arbelak"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "fitxategia"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "arbeleko elementua"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "arbeleko elementuak"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "karpeta"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "fitxategi tamaina"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "beharrezko datu guztiak ditu"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "jatorrizko fitxategi izena"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "izena"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "deskribapena"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "jaea"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "noiz igota"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "noiz aldatua"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Baimenak ezgaituta"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "noiz sortua"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Karpeta"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Karpetak"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "elementu guztiak"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "elementu hau bakarrik"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "elementu hau eta bere semeak"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "mota"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "taldea"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "edonor"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "irakurri dezake"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "editatu dezake"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "semeak gehitu ditzake"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "karpeta baimena"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "karpeta baimenak"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "sortze data"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "egilea"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "egilearen kredituak beti argitaratu behar dira"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "copyright-a beti argitaratu behar da"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "metadatuak faltan dituzten fitxategiak"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "erroa"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Hautatutako ekintza abiarazi"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Joan"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Hemen klikatu orri guztietako objektuak hautatzeko"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Hautatu %(total_count)s fitxategi eta/edo karpeta guztiak"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Hautapena hustu"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Kudeaketa hasierara itzuli"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Etxea"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Filer aplikaziora itzuli"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Erro karpetara itzuli"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "'%(folder_name)s karpetara itzuli'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Ziur hautatutako fitxategi eta/edo karpetak ezabatu nahi dituzula? Ondoko "
+"objektu eta erlazionatutako elementu guztiak ezabatuko lirateke:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Aurrekoak"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Webgunean ikusi"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Itzuli hona:"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "kudeaketa hasiera"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Karpeta ikonoa"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Ez dago helburuko karpetarik eskuragarri."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Ez dago kopiatu daitekeen fitxategi eta/edo karpetarik."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Helburuko karpeta:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopiatu"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Ez dago tamaina aldatu dezakeen irudirik."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Ondoko irudien tamaina aldatuko da:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Argazkitxo aukera bat hautatu edo tamaina aldatzeko parametroak ezarri:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Kontuz: Irudien tamaina aldatzean jatorrizkoak galduko dira. Lehenbizi "
+"jatorrizkoen kopia egin zenezake."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Tamaina aldatu"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Zure kontuak ez du hautatutako fitxategi eta/edo karpeta guztiak mugitzeko "
+"baimenik."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Ez dago mugitu daitekeen fitxategi edo/eta karpetarik."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Mugitu"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "Zure kontuak ez du hautatutako fitxategiak berrizendatzeko baimenik."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Ez dago berrizendatu daitekeen fitxategirik."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Berrizendatu"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Karpeta gurasora joan"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Uneko karpetaren xehetasunak aldatu"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Aldatu"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Bilatu"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Ezabatu"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Karpeta berri bat sortzen du"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Karpeta berria"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Izena"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Jabea"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "'%(item_label)s' karpetaren xehetasunak aldatu"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Fitxategi hau aukeratu"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "'%(item_label)s'(r)en xehetasunak aldatu"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Baimenak"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "ezgaituta"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "gaituta"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Hautatutako fitxategiak arbelara mugitu"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Igo"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "aurrekoa"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "hurrengoa"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Berria gehitu"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Zuzendu azpiko errorea mesedez."
+msgstr[1] "Zuzendu azpiko erroreak mesedez."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Gorde"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Arbela"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Elementu guztiak hemen itsatsi"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Arbeleko fitxategi guztiak hona mugitu:"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "arbela hutsik dago"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "igotzean errorea"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "topatuta"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "eta"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "bilaketa ezeztatu"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Garbitu"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "hautatutako fitxategirik ez"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Bilatu"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/fa/LC_MESSAGES/django.mo b/filer/locale/fa/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..aed0b0b26
Binary files /dev/null and b/filer/locale/fa/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/fa/LC_MESSAGES/django.po b/filer/locale/fa/LC_MESSAGES/django.po
new file mode 100644
index 000000000..964b88a0c
--- /dev/null
+++ b/filer/locale/fa/LC_MESSAGES/django.po
@@ -0,0 +1,1045 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Dimacodev Team ddmc.ir , 2025
+# Translators:
+# Translators:
+# Fariman Ghaedi , 2019
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Fariman Ghaedi , 2019\n"
+"Language-Team: Persian (http://app.transifex.com/divio/django-filer/language/"
+"fa/)\n"
+"Language: fa\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr "شما مجوز آپلود فایل ها را ندارید."
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr "پوشه ای برای آپلود یافت نشد. لطفاً صفحه را رفرش کرده و دوباره تلاش کنید"
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr "استفاده از این پوشه امکان پذیر نیست، دسترسی رد شد. لطفاً پوشه دیگری انتخاب کنید."
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "پیشرفته"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "آدرس کانونی"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"برای اینکه بتوانید روی آیتم ها اقداماتی انجام دهید ابتدا باید آیتم ها را "
+"انتخاب کنید. هیچ آیتمی تغییر نکرد."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s انتخاب شده"
+msgstr[1] "همه %(total_count)s انتخاب شده"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "لیست دایرکتوری برای %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 از %(cnt)s انتخاب شده"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "هیچ اقدامی انتخاب نشده است."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "%(count)d فایل با موفقیت به کلیپ برد منتقل شد."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "انتقال فایل های انتخاب شده به کلیپ برد"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "مجوزهای %(count)d فایل با موفقیت غیرفعال شد."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "مجوزهای %(count)d فایل با موفقیت فعال شد."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "فعال کردن مجوزها برای فایل های انتخاب شده"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "غیرفعال کردن مجوزها برای فایل های انتخاب شده"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "%(count)d فایل و/یا پوشه با موفقیت حذف شد."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "امکان حذف فایل ها و/یا پوشه ها وجود ندارد"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "آیا مطمئن هستید؟"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "حذف فایل ها و/یا پوشه ها"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "حذف فایل ها و/یا پوشه های انتخاب شده"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "پوشه هایی با نام %s در مقصد انتخاب شده از قبل وجود دارند"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "%(count)d فایل و/یا پوشه با موفقیت به پوشه '%(destination)s' منتقل شد."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "انتقال فایل ها و/یا پوشه ها"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "انتقال فایل ها و/یا پوشه های انتخاب شده"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "%(count)d فایل با موفقیت تغییر نام داده شد."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "تغییر نام فایل ها"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "%(count)d فایل و/یا پوشه با موفقیت به پوشه '%(destination)s' کپی شد."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "کپی فایل ها و/یا پوشه ها"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "کپی فایل ها و/یا پوشه های انتخاب شده"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "%(count)d تصویر با موفقیت تغییر اندازه داده شد."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "تغییر اندازه تصاویر"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "تغییر اندازه تصاویر انتخاب شده"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "پسوندی که به نام فایل های کپی شده اضافه خواهد شد."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr "پسوند باید بخشی معتبر، ساده و با حروف کوچک از نام فایل باشد، مانند \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "کلید مقدار فرمت تغییر نام ناشناخته \"%(key)s\"."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "فرمت تغییر نام نامعتبر: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "گزینه تصویر بندانگشتی"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "عرض"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "ارتفاع"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "برش"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "بزرگنمایی"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "باید گزینه تصویر بندانگشتی یا پارامترهای تغییر اندازه انتخاب شود."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "موقعیت موضوع"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "موقعیت موضوع اصلی صحنه. فرمت: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "فرمت موقعیت موضوع نامعتبر است. "
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "موقعیت موضوع خارج از تصویر است. "
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "ورودی شما: \"{subject_location}\". "
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr "چه کسی"
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr "چه چیزی"
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "پوشه با این نام از قبل وجود دارد."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "فایلر"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "کتابخانه رسانه"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "متن جایگزین پیشفرض"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "عنوان پیشفرض"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "موقعیت موضوع"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "تصویر"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "تصاویر"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+"فرمت تصویر تشخیص داده نشد یا اندازه تصویر از حد مجاز %(max_pixels)d میلیون پیکسل "
+"دو برابر یا بیشتر است. قبل از آپلود مجدد، فرمت فایل را بررسی کنید یا تصویر را "
+"به اندازه %(width)d x %(height)d پیکسل یا کمتر تغییر اندازه دهید."
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+"اندازه تصویر (%(pixels)d میلیون پیکسل) از حد مجاز %(max_pixels)d میلیون پیکسل "
+"فراتر رفته است. قبل از آپلود مجدد، تصویر را به اندازه %(width)d x %(height)d "
+"پیکسل یا کمتر تغییر اندازه دهید."
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "کاربر"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "فایل ها"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "کلیپ برد"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "کلیپ بردها"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "فایل"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "آیتم کلیپ برد"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "آیتم های کلیپ برد"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "پوشه"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "اندازه فایل"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "دارای تمام داده های اجباری است"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "نام فایل اصلی"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "نام"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "توضیحات"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "مالک"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "آپلود شده در"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "تغییر یافته در"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "مجوزها غیرفعال شده"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr "بررسی هرگونه مجوز برای این فایل را غیرفعال کنید. فایل برای همه به صورت عمومی قابل دسترسی خواهد بود."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr "والد"
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "ایجاد شده در"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "پوشه"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "پوشه ها"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "همه آیتم ها"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "فقط این آیتم"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "این آیتم و تمام فرزندان"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr "به ارث بردن"
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "اجازه دادن"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "رد کردن"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "نوع"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "گروه"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "همه"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "می تواند بخواند"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "می تواند ویرایش کند"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "می تواند فرزند اضافه کند"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "مجوز پوشه"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "مجوزهای پوشه"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr "پوشه نمی تواند با نوع \"همه آیتم ها\" انتخاب شود."
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr "هنگامی که نوع \"همه آیتم ها\" نیست، باید پوشه انتخاب شود."
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr "کاربر یا گروه نمی تواند همراه با \"همه\" انتخاب شود."
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr "حداقل یکی از کاربر، گروه یا \"همه\" باید انتخاب شود."
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr "همه پوشه ها"
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr "مسیر منطقی"
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr "کاربر: {user}"
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr "گروه: {group}"
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr "همه"
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr "ویرایش"
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr "خواندن"
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr "افزودن فرزند"
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "تاریخ گرفته شده"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "نویسنده"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "همیشه باید اعتبار نویسنده منتشر شود"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "همیشه باید حق چاپ منتشر شود"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "عرض بر حسب پیکسل."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "ارتفاع بر حسب پیکسل."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "گزینه های تصویر بندانگشتی"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "آپلودهای مرتب نشده"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "فایل های با متادیتای از دست رفته"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "ریشه"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr "نمایش نمای جدولی"
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr "نمایش نمای بندانگشتی"
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "اجرای عمل انتخاب شده"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "برو"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "برای انتخاب اشیاء در تمام صفحات اینجا کلیک کنید"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "انتخاب همه %(total_count)s فایل ها و/یا پوشه ها"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "پاک کردن انتخاب"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "بازگشت به صفحه اصلی مدیریت"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "خانه"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "بازگشت به برنامه فایلر"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "بازگشت به پوشه ریشه"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "بازگشت به پوشه '%(folder_name)s'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "تکرارها"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"حذف فایل ها و/یا پوشه های انتخاب شده منجر به حذف اشیاء مرتبط می شود، اما حساب "
+"شما مجوز حذف انواع زیر از اشیاء را ندارد:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"حذف فایل ها و/یا پوشه های انتخاب شده مستلزم حذف اشیاء محافظت شده مرتبط زیر است:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"آیا مطمئن هستید که می خواهید فایل ها و/یا پوشه های انتخاب شده را حذف کنید؟ همه "
+"اشیاء زیر و آیتم های مرتبط با آنها حذف خواهند شد:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "خیر، مرا برگردان"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "بله، مطمئنم"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "تاریخچه"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "مشاهده در سایت"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "بازگشت به"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "صفحه اصلی مدیریت"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "آیکون پوشه"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr "حساب شما مجوز کپی کردن همه فایل ها و/یا پوشه های انتخاب شده را ندارد."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "مرا برگردان"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "هیچ پوشه مقصدی در دسترس نیست."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "هیچ فایل و/یا پوشه ای برای کپی کردن در دسترس نیست."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr "فایل ها و/یا پوشه های زیر به یک پوشه مقصد کپی خواهند شد (ساختار درختی آنها حفظ می شود):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "پوشه مقصد:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "کپی"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "کپی کردن فایل ها به همان پوشه مجاز نیست"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "حساب شما مجوز تغییر اندازه همه تصاویر انتخاب شده را ندارد."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "هیچ تصویری برای تغییر اندازه در دسترس نیست."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "تصاویر زیر تغییر اندازه داده خواهند شد:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "یک گزینه تصویر بندانگشتی موجود را انتخاب کنید یا پارامترهای تغییر اندازه را وارد کنید:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"هشدار: تصاویر در جای خود تغییر اندازه داده می شوند و نسخه های اصلی از بین می "
+"روند. شاید بهتر است ابتدا یک کپی از آنها تهیه کنید تا نسخه های اصلی حفظ شوند."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "تغییر اندازه"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr "حساب شما مجوز جابجایی همه فایل ها و/یا پوشه های انتخاب شده را ندارد."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "هیچ فایل و/یا پوشه ای برای جابجایی در دسترس نیست."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr "فایل ها و/یا پوشه های زیر به یک پوشه مقصد منتقل خواهند شد (ساختار درختی آنها حفظ می شود):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "انتقال"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "انتقال فایل ها به همان پوشه مجاز نیست"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "حساب شما مجوز تغییر نام همه فایل های انتخاب شده را ندارد."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "هیچ فایلی برای تغییر نام در دسترس نیست."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr "فایل های زیر تغییر نام داده خواهند شد (در پوشه های خود باقی می مانند و نام فایل اصلی حفظ می شود، فقط نام نمایش داده شده تغییر می کند):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "تغییر نام"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "بازگشت به پوشه والد"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "تغییر جزئیات پوشه فعلی"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "تغییر"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "برای جستجوی عبارت وارد شده اینجا کلیک کنید"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "جستجو"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "بستن"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "محدودیت"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "برای محدود کردن جستجو به پوشه فعلی آن را بررسی کنید"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "محدود کردن جستجو به پوشه فعلی"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "حذف"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "افزودن یک پوشه جدید"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "پوشه جدید"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "بارگذاری فایلها"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "ابتدا باید یک پوشه انتخاب کنید"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "نام"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "مالک"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "اندازه"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "عملیات"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "تغییر جزئیات پوشه '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s پوشه"
+msgstr[1] "%(counter)s پوشه"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s فایل"
+msgstr[1] "%(counter)s فایل"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "تغییر جزئیات پوشه"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "حذف پوشه"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "انتخاب این فایل"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "تغییر جزئیات '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "مجوزها"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "غیرفعال"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "فعال"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "آدرس URL به کلیپبورد کپی شد"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "آدرس اصلی '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "دانلود '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "حذف فایل"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "فایلها را اینجا رها کنید یا از دکمه «بارگذاری فایلها» استفاده کنید"
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "فایل خود را برای بارگذاری اینجا رها کنید:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "بارگذاری"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "لغو"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "بارگذاری موفقیتآمیز بود!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "بارگذاری لغو شد!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "قبلی"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "صفحه %(number)s از %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "بعدی"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "انتخاب همه %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr "انتخاب همه"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr "فایلها"
diff --git a/filer/locale/fi/LC_MESSAGES/django.mo b/filer/locale/fi/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..984dc53b7
Binary files /dev/null and b/filer/locale/fi/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/fi/LC_MESSAGES/django.po b/filer/locale/fi/LC_MESSAGES/django.po
new file mode 100644
index 000000000..35fc907e0
--- /dev/null
+++ b/filer/locale/fi/LC_MESSAGES/django.po
@@ -0,0 +1,1259 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Niklas Jerva , 2016
+# Teemu Gratschev , 2022
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Teemu Gratschev , 2022\n"
+"Language-Team: Finnish (http://app.transifex.com/divio/django-filer/language/"
+"fi/)\n"
+"Language: fi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Edistyneet asetukset"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "sääntöjenmukainen URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Toiminnon suorittamiseksi pitää valita kohteita. Yhtäänkohdetta ei ole "
+"valittu."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s valittu"
+msgstr[1] "Kaikki %(total_count)s valittu"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Hakemistolistaus kansiolle %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 / %(cnt)s valittu"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Toimintoa ei ole valittu."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "%(count)d tiedostoa siirretty leikepöydälle."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Siirrä valitut tiedostot leikepöydälle"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "%(count)d tiedoston käyttöoikeudet poistettu käytöstä."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Käyttöoikeudet otettu käyttöön %(count)d tiedostolle."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Ota käyttöoikeudet käyttöön valituille tiedostoille"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Poista käyttöoikeudet käytöstä valituista tiedostoista"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "%(count)d tiedostoa ja/tai kansiota poistettu."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Kansioita ja/tai tiedostoja ei voida poistaa"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Oletko varma?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Poista tiedostot ja/tai kansiot"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Poista valitut tiedostot ja/tai kansiot"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "%s niminen kansio on jo valitussa kohteessa"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"%(count)d tiedostoa ja/tai kansiota siirretty kansioon '%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Siirrä tiedostot ja/tai kansiot"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Siirrä valitut tiedostot ja/tai kansiot"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "%(count)d tiedostoa nimetty uudelleen."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Nimeä tiedostot uudelleen"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"%(count)d tiedostoa ja/tai kansiota kopioitu kansioon '%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Kopioi tiedostot ja/tai kansiot"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Kopioi valitut tiedostot ja/tai kansiot"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "%(count)d kuvan kokoa muutettu."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Muuta kuvien kokoa"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Muuta valittujen kuvien kokoa"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Pääte, joka lisätään kopioitujen tiedostojen nimiin."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Päätteen tulee olla käypä, yksinkertainen ja pienellä kirjoitettu osa "
+"tiedostonimeä, esim. \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Tuntematon uudelleennimeämisarvo \"%(key)s\"."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Virheellinen uudelleennimeämismuoto: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "pikkukuvan asetus"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "leveys"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "korkeus"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "rajaus"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "suurenna"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Pikkukuvan asetus tai koon muuttamisen parametrit tulee valita."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Kohteen sijainti"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Kuvan pääkohteen sijainti. Muoto: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Virheellinen kohteen sijainnin muoto."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Kohteen sijainti kuvan ulkopuolella."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Syöttösi: \"{subject_location}\"."
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Saman niminen kansio on jo olemassa."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Mediakirjasto"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "oletus alt-teksti"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "oletuskuvateksti"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "kohteen sijainti"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "kuva"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "kuvat"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "käyttäjä"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "tiedostot"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "leikepöytä"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "leikepöydät"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "tiedosto"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "leikepöydän kohde"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "leikepöydän kohteet"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "kansio"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "tiedostokoko"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "sisältää kaikki pakolliset tiedot"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "alkuperäinen tiedostonimi"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "nimi"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "kuvaus"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "omistaja"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "ladattu"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "muokattu"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Käyttöoikeudet pois käytöstä"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Poista käyttöoikeuksien tarkistus tältä tiedostolta. Tiedosto näkyy "
+"julkisena kaikille."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "luotu"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Kansio"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Kansiot"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "kaikki kohteet"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "vain tämä kohde"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "tämä kohde ja kaikki lapset"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "salli"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "kiellä"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "tyyppi"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "ryhmä"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "kaikki"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "saa lukea"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "saa muokata"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "saa lisätä lapsia"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "kansion käyttöoikeus"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "kansion käyttöoikeudet"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "päivämäärä"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "tekijä"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "tekijän tiedot on aina julkaistava"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "tekijänoikeustiedot on aina julkaistava"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "leveys pikseleinä."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "korkeus pikseleinä."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "pikkukuvan asetukset"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Järjestelemättömät lataukset"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "tiedostot ilman metadataa"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "juuri"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Suorita valittu toiminto"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Suorita"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Valitse kaikki kohteet kaikilta sivuilta"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Valitse kaikki %(total_count)s tiedostoa ja/tai kansiota"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Tyhjennä valinta"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Palaa hallinnan etusivulle"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Etusivu"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Palaa Fileriin"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Palaa juurikansioon"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Palaa kansioon '%(folder_name)s'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Kaksoiskappaleet"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Valittujen tiedostojen ja/tai kansioiden poistaminen vaatii liittyvien "
+"objektien poistamista, mutta käyttöoikeutesi eivät riitäseuraavien "
+"objektityyppien poistamiseen:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Valittujen tiedostojen ja/tai kansioiden poistaminen vaatisi seuraavien "
+"suojattujen liittyvien objektien poistamista:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Oletko varma, että haluat poistaa valitut tiedostot ja/tai kansiot? Kaikki "
+"seuraavat objektit ja niihin liittyvät kohteet poistetaan:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Ei, vie minut takaisin"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Kyllä, olen varma"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Historia"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Näytä sivustolla"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Palaa kohteeseen"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "hallinnan etusivu"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Kansion kuvake"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+"Käyttöoikeutesi eivät riitä kaikkien valittujen tiedostojen ja/tai "
+"kansioidenkopioimiseen."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Vie minut takaisin"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Kohdekansioita ei ole saatavilla."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Kopioitavia tiedostoja ja/tai kansioita ei ole saatavilla."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Seuraavat tiedostot ja/tai kansiot kopioidaan kohdekansioon (säilyttäen "
+"puurakenteen):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Kohdekansio:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopioi"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Tiedostojen kopiointi samaan kansioon ei ole sallittu"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+"Käyttöoikeutesi eivät riitä kaikkien valittujen kuvien koon muuttamiseen."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Kuvia, joiden kokoa voisi muuttaa ei ole saatavilla."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Seuraavien kuvien kokoa muutetaan:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "Valitse olemassaolevat pikkukuvan asetukset tai syötä kokoparametrit:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Varoitus: Kuvien kokoa muuttaessa alkuperäiset versiot menetetään. On hyvä "
+"idea tehdä kuvista ensin kopiot alkuperäisten säilyttämiseksi."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Muuta kokoa"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Käyttöoikeutesi eivät riitä kaikkien valittujen tiedostojen ja/tai "
+"kansioidensiirtämiseen."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Siirrettäviä tiedostoja ja/tai kansioita ei ole saatavilla."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Seuraavat tiedostot ja/tai kansiot siirretään kohdekansioon (säilyttäen "
+"niiden puurakenne):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Siirrä"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Tiedostojen siirto samaan kansioon ei ole sallittua"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+"Käyttöoikeutesi eivät riitä kaikkien valittujen tiedostojen "
+"uudelleennimeämiseen."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Uudelleennimettäviä tiedostoja ei ole saatavilla."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"Seuraavat tiedostot uudelleennimetään (ne pysyvät kansioissaan ja "
+"alkuperäiset tiedostonimet säilytetään, vain näytettävä tiedostonimi "
+"muutetaan):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Uudelleennimeä"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Palaa ylempään kansioon"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Muuta nykyisen kansion tietoja"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Muuta"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Valitse suorittaaksesi haun annetulla hakusanalla"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Hae"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Sulje"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Raja"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Valitse rajoittaaksesi haun nykyiseen kansioon"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Rajoita haku nykyiseen kansioon"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Poista"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Lisää uusi kansio"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Uusi kansio"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Lataa tiedostoja"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Sinun tulee valita kansio ensin"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Nimi"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Omistaja"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Koko"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Toiminto"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Muuta kansion '%(item_label)s' tietoja"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s kansio"
+msgstr[1] "%(counter)s kansiota"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s tiedosto"
+msgstr[1] "%(counter)s tiedostoa"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Muuta kansion tietoja"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Poista kansio"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Valitse tämä tiedosto"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Muuta kohteen '%(item_label)s' tietoja"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Käyttöoikeudet"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "pois käytöstä"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "käytössä"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Siirrä valitut tiedostot leikepöydälle"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "Canonical-osoite '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Lataa '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Poista tiedosto"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Pudota tiedostoja tähän tai käytä \"Lataa tiedostoja\" painiketta"
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Pudota tiedostosi:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Siirrä palvelimelle"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "peruuta"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Lataus onnistui!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Lataus peruttu!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "edellinen"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Sivu %(number)s/%(num_pages)s"
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "seuraava"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Valitse kaikki %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Lisää uusi"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Django-sivuston ylläpito"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Ole hyvä ja korjaa allaoleva virhe."
+msgstr[1] "Ole hyvä ja korjaa allaolevat virheet."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Tallenna"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Leikepöytä"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Liitä kaikki kohteet tähän"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Siirrä kaikki leikepöydällä olevat tiedostot"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Tyhjä leikepöytä"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "leikepöytä on tyhjä"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "siirto epäonnistui"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Tyyppi"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Tiedostokoko"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Muokattu"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Luotu"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "löytyi"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "ja"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "peruuta haku"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Tyhjennä"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "tai pudota tiedostosi tähän"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "yhtään tiedostoa ei ole valittu"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Haku"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Valitse tiedosto"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/fr/LC_MESSAGES/django.mo b/filer/locale/fr/LC_MESSAGES/django.mo
index 602810612..9936407bf 100644
Binary files a/filer/locale/fr/LC_MESSAGES/django.mo and b/filer/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/fr/LC_MESSAGES/django.po b/filer/locale/fr/LC_MESSAGES/django.po
index 662e7b320..5e56554c3 100644
--- a/filer/locale/fr/LC_MESSAGES/django.po
+++ b/filer/locale/fr/LC_MESSAGES/django.po
@@ -1,935 +1,1249 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
-# Bertrand Bordage , 2012.
-# Marion Balensi , 2012.
+# Translators:
+# Translators:
+# Assma Buifruri , 2017
+# Bertrand Bordage , 2012-2013
+# Sylvain Chiron , 2016
+# Corentin Bettiol, 2023
+# Jason Gass Martinez , 2016
+# Marion Balensi , 2012
+# Nicolas PASCAL , 2019
msgid ""
msgstr ""
-"Project-Id-Version: django-filer\n"
+"Project-Id-Version: django Filer\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-07-13 19:10+0200\n"
-"PO-Revision-Date: 2012-09-03 20:11+0100\n"
-"Last-Translator: Stefan Foulis \n"
-"Language-Team: French (http://www.transifex.com/projects/p/django-filer/"
-"language/fr/)\n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Corentin Bettiol, 2023\n"
+"Language-Team: French (http://app.transifex.com/divio/django-filer/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
-#: views.py:103
-msgid "Folder with this name already exists."
-msgstr "Il existe déjà un dossier avec ce nom."
+#: admin/clipboardadmin.py:17
+#| msgid ""
+#| "ccount doesn't have permissions to rename all of the selected files."
+msgid "You do not have permission to upload files."
+msgstr "Vous n'avez pas la permission d'héberger des fichiers."
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr "Dossier d'hébergement introuvable, rafraîchissez la page et réessayez."
-#: admin/fileadmin.py:41
+#: admin/clipboardadmin.py:20
+msgid ""
+"Can't use this folder, Permission Denied. Please select another folder."
+msgstr "Utilisation du dossier impossible : Permissions insuffisantes. Sélectionnez un autre dossier."
+
+#: admin/fileadmin.py:73
msgid "Advanced"
msgstr "Avancé"
-#: admin/folderadmin.py:324 admin/folderadmin.py:427
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "URL canonique"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
msgid ""
"Items must be selected in order to perform actions on them. No items have "
"been changed."
-msgstr ""
-"Des éléments doivent être selectionnés pour effectuer des actions sur eux. "
-"Aucun élément n'a été modifié."
+msgstr "Des éléments doivent être sélectionnés pour effectuer les actions. Aucun élément n'a été modifié."
-#: admin/folderadmin.py:344
+#: admin/folderadmin.py:434
#, python-format
msgid "%(total_count)s selected"
msgid_plural "All %(total_count)s selected"
msgstr[0] "%(total_count)s sélectionné"
msgstr[1] "Tous les %(total_count)s sélectionnés"
+msgstr[2] "Tous les %(total_count)s sélectionnés"
-#: admin/folderadmin.py:377
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Liste du répertoire pour %(folder_name)s"
+
+#: admin/folderadmin.py:475
#, python-format
msgid "0 of %(cnt)s selected"
msgstr "0 sur %(cnt)s sélectionné"
-#: admin/folderadmin.py:456
+#: admin/folderadmin.py:612
msgid "No action selected."
msgstr "Pas d'action sélectionnée."
-#: admin/folderadmin.py:497
+#: admin/folderadmin.py:664
#, python-format
msgid "Successfully moved %(count)d files to clipboard."
msgstr "%(count)d fichiers déplacés avec succès vers le presse-papiers."
-#: admin/folderadmin.py:503
+#: admin/folderadmin.py:669
msgid "Move selected files to clipboard"
-msgstr "Déplacer les fichiers sélectionnés vers le presse-papiers."
+msgstr "Déplacer les fichiers sélectionnés vers le presse-papiers"
-#: admin/folderadmin.py:537
+#: admin/folderadmin.py:709
#, python-format
msgid "Successfully disabled permissions for %(count)d files."
msgstr "Permissions désactivées avec succès pour %(count)d fichiers."
-#: admin/folderadmin.py:541
+#: admin/folderadmin.py:711
#, python-format
msgid "Successfully enabled permissions for %(count)d files."
msgstr "Permissions activées avec succès pour %(count)d fichiers."
-#: admin/folderadmin.py:550
+#: admin/folderadmin.py:719
msgid "Enable permissions for selected files"
msgstr "Activer les permissions pour les fichiers sélectionnés."
-#: admin/folderadmin.py:555
+#: admin/folderadmin.py:725
msgid "Disable permissions for selected files"
msgstr "Désactiver les permissions pour les fichiers sélectionnés."
-#: admin/folderadmin.py:623
+#: admin/folderadmin.py:789
#, python-format
msgid "Successfully deleted %(count)d files and/or folders."
msgstr "%(count)d fichiers et/ou dossiers supprimés avec succès."
-#: admin/folderadmin.py:630
+#: admin/folderadmin.py:794
msgid "Cannot delete files and/or folders"
msgstr "Impossible de supprimer les fichiers et/ou dossiers."
-#: admin/folderadmin.py:632
+#: admin/folderadmin.py:796
msgid "Are you sure?"
msgstr "Êtes-vous sûr(e) ?"
-#: admin/folderadmin.py:637
+#: admin/folderadmin.py:802
msgid "Delete files and/or folders"
-msgstr "Supprimer les fichiers et/ou dossiers."
+msgstr "Supprimer les fichiers et/ou dossiers"
-#: admin/folderadmin.py:656
+#: admin/folderadmin.py:823
msgid "Delete selected files and/or folders"
-msgstr "Supprimer les fichiers et/ou dossiers sélectionnés."
+msgstr "Supprimer les fichiers et/ou dossiers sélectionnés"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Des dossiers nommés %s existent déjà dans la destination sélectionnée"
-#: admin/folderadmin.py:771
+#: admin/folderadmin.py:934
#, python-format
msgid ""
"Successfully moved %(count)d files and/or folders to folder "
"'%(destination)s'."
-msgstr ""
-"%(count)d fichiers et/ou dossiers déplacés avec succès vers le dossier « "
-"%(destination)s »."
+msgstr "%(count)d fichiers et/ou dossiers déplacés avec succès vers le dossier « %(destination)s »."
-#: admin/folderadmin.py:778 admin/folderadmin.py:780
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
msgid "Move files and/or folders"
-msgstr "Déplacer les fichers et/ou dossiers."
+msgstr "Déplacer les fichiers et/ou dossiers"
-#: admin/folderadmin.py:797
+#: admin/folderadmin.py:959
msgid "Move selected files and/or folders"
-msgstr "Déplacer les fichiers et/ou dossiers sélectionnés."
+msgstr "Déplacer les fichiers et/ou dossiers sélectionnés"
-#: admin/folderadmin.py:854
+#: admin/folderadmin.py:1016
#, python-format
msgid "Successfully renamed %(count)d files."
msgstr "%(count)d fichiers renommés avec succès."
-#: admin/folderadmin.py:862 admin/folderadmin.py:864 admin/folderadmin.py:881
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
msgid "Rename files"
-msgstr "Renommer les fichiers."
+msgstr "Renommer les fichiers"
-#: admin/folderadmin.py:975
+#: admin/folderadmin.py:1137
#, python-format
msgid ""
"Successfully copied %(count)d files and/or folders to folder "
"'%(destination)s'."
-msgstr ""
-"%(count)d fichiers et/dossiers copiés avec succès dans le dossier « "
-"%(destination)s »."
+msgstr "%(count)d fichiers et/dossiers copiés avec succès dans le dossier « %(destination)s »."
-#: admin/folderadmin.py:989 admin/folderadmin.py:991
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
msgid "Copy files and/or folders"
-msgstr "Copier les fichiers et/ou dossiers."
+msgstr "Copier les fichiers et/ou dossiers"
-#: admin/folderadmin.py:1010
+#: admin/folderadmin.py:1174
msgid "Copy selected files and/or folders"
-msgstr "Copier les fichiers et/ou dossiers sélectionnés."
+msgstr "Copier les fichiers et/ou dossiers sélectionnés"
-#: admin/folderadmin.py:1105
+#: admin/folderadmin.py:1279
#, python-format
msgid "Successfully resized %(count)d images."
msgstr "%(count)d images redimensionnées avec succès."
-#: admin/folderadmin.py:1113 admin/folderadmin.py:1115
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
msgid "Resize images"
-msgstr "Redimensionner les images."
+msgstr "Redimensionner les images"
-#: admin/folderadmin.py:1133
+#: admin/folderadmin.py:1303
msgid "Resize selected images"
-msgstr "Redimensionner les images sélectionnées."
+msgstr "Redimensionner les images sélectionnées"
-#: admin/forms.py:26
+#: admin/forms.py:24
msgid "Suffix which will be appended to filenames of copied files."
-msgstr "Suffixe qui sera ajouté aux noms des fichiers copiés."
+msgstr "Suffixe qui sera ajouté au nom des fichiers copiés."
-#: admin/forms.py:33
+#: admin/forms.py:31
#, python-format
msgid ""
"Suffix should be a valid, simple and lowercase filename part, like "
"\"%(valid)s\"."
-msgstr ""
-"Le suffixe doit être une partie de nom de fichier simple et en minuscules, "
-"comme \"%(valid)s\"."
+msgstr "Le suffixe doit être une partie de nom de fichier valide, simple et en minuscules, comme « %(valid)s »."
-#: admin/forms.py:54
+#: admin/forms.py:52
#, python-format
msgid "Unknown rename format value key \"%(key)s\"."
-msgstr "La valeur de la clé de formatage \"%(key)s\" est inconnue."
+msgstr "La clé de formatage « %(key)s » est inconnue."
-#: admin/forms.py:56
+#: admin/forms.py:54
#, python-format
msgid "Invalid rename format: %(error)s."
msgstr "Format de renommage non valide : %(error)s."
-#: admin/forms.py:62
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
msgid "thumbnail option"
msgstr "option de miniature"
-#: admin/forms.py:63
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
msgid "width"
msgstr "largeur"
-#: admin/forms.py:64
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
msgid "height"
msgstr "hauteur"
-#: admin/forms.py:65
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
msgid "crop"
msgstr "rogner"
-#: admin/forms.py:66
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
msgid "upscale"
-msgstr "élargir"
+msgstr "agrandir"
-#: admin/forms.py:71
+#: admin/forms.py:79
msgid "Thumbnail option or resize parameters must be choosen."
-msgstr ""
-"Une option de miniature ou des paramètres de redimensionnement doivent être "
-"choisis."
-
-#: admin/forms.py:73
-msgid "Resize parameters must be choosen."
-msgstr "Des paramètres de redimensionnement doivent être choisis."
+msgstr "Une option de miniature ou des paramètres de dimensionnement doivent être choisis."
-#: admin/imageadmin.py:12
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
msgid "Subject location"
msgstr "Emplacement du sujet"
-#: admin/imageadmin.py:13
-msgid "Location of the main subject of the scene."
-msgstr "Emplacement du sujet principal de la scène."
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Emplacement du sujet principal de la scène. Format : « x,y »."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Format d'emplacement de sujet invalide."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "L'emplacement du sujet est en dehors de l'image."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Votre entrée : « {subject_location} »."
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr "Qui"
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr "Quoi"
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Il existe déjà un dossier avec ce nom."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Bibliotèque multimedia"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "texte alternatif par défaut"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "légende par défaut"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "emplacement du sujet"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "image"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "images"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr "Le format de l'image n'est pas reconnu, ou la taille de l'image dépasse la limite de%(max_pixels)d millions pixels deux fois ou plus. Avant d'envoyer l'image à nouveau, vérifiez le format de l'image, ou redimensionnez l'image afin qu'elle aie une résolution de %(width)d x %(height)d pixels ou moins."
-#: models/clipboardmodels.py:9 models/foldermodels.py:236
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr "La taille de l'image (%(pixels)d millions de pixels) dépasse la limite de %(max_pixels)d millions de pixels. Avant d'envoyer l'image à nouveau, redimensionnez la pour qu'elle aie une résolution de %(width)d x %(height)d pixels ou moins."
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
msgid "user"
msgstr "utilisateur"
-#: models/clipboardmodels.py:11 models/filemodels.py:287
+#: models/clipboardmodels.py:17 models/filemodels.py:157
msgid "files"
msgstr "fichiers"
-#: models/clipboardmodels.py:34 models/clipboardmodels.py:40
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
msgid "clipboard"
msgstr "presse-papiers"
-#: models/clipboardmodels.py:35
+#: models/clipboardmodels.py:25
msgid "clipboards"
-msgstr "presses-papiers"
+msgstr "presse-papiers"
-#: models/clipboardmodels.py:39 models/filemodels.py:35
-#: models/filemodels.py:286
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
msgid "file"
-msgstr "fichiers"
+msgstr "fichier"
-#: models/clipboardmodels.py:44
+#: models/clipboardmodels.py:56
msgid "clipboard item"
msgstr "élément du presse-papiers"
-#: models/clipboardmodels.py:45
+#: models/clipboardmodels.py:57
msgid "clipboard items"
msgstr "éléments du presse-papiers"
-#: models/filemodels.py:33 templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
#: templates/admin/filer/folder/new_folder_form.html:4
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
msgid "folder"
msgstr "dossier"
-#: models/filemodels.py:36
+#: models/filemodels.py:81
msgid "file size"
msgstr "taille du fichier"
-#: models/filemodels.py:38
+#: models/filemodels.py:87
msgid "sha1"
msgstr "sha1"
-#: models/filemodels.py:40
+#: models/filemodels.py:94
msgid "has all mandatory data"
msgstr "possède toutes les données nécessaires"
-#: models/filemodels.py:42
+#: models/filemodels.py:100
msgid "original filename"
msgstr "nom de fichier originel"
-#: models/filemodels.py:44 models/foldermodels.py:99
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
msgid "name"
msgstr "nom"
-#: models/filemodels.py:46
+#: models/filemodels.py:116
msgid "description"
msgstr "description"
-#: models/filemodels.py:50
+#: models/filemodels.py:125 models/foldermodels.py:108
msgid "owner"
msgstr "propriétaire"
-#: models/filemodels.py:52 models/foldermodels.py:105
+#: models/filemodels.py:129 models/foldermodels.py:116
msgid "uploaded at"
-msgstr "transféré le"
+msgstr "téléversé le"
-#: models/filemodels.py:53 models/foldermodels.py:108
+#: models/filemodels.py:134 models/foldermodels.py:126
msgid "modified at"
msgstr "modifié le"
-#: models/filemodels.py:57
+#: models/filemodels.py:140
msgid "Permissions disabled"
msgstr "Permissions désactivées"
-#: models/filemodels.py:58
-msgid "Disable any permission checking for this "
-msgstr ""
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr "Désactiver la vérification des permissions pour ce fichier. Le fichier sera publiquement accessible à tout le monde."
-#: models/foldermodels.py:107
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr "parent"
+
+#: models/foldermodels.py:121
msgid "created at"
msgstr "créé le"
-#: models/foldermodels.py:211
-#: templates/admin/filer/widgets/admin_folder.html:3
-#: templates/admin/filer/widgets/admin_folder.html:5
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Folder"
msgstr "Dossier"
-#: models/foldermodels.py:212
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
msgid "Folders"
msgstr "Dossiers"
-#: models/foldermodels.py:227
+#: models/foldermodels.py:260
msgid "all items"
msgstr "tous les éléments"
-#: models/foldermodels.py:228
+#: models/foldermodels.py:261
msgid "this item only"
msgstr "cet élément seulement"
-#: models/foldermodels.py:229
+#: models/foldermodels.py:262
msgid "this item and all children"
msgstr "cet élément et ses enfants"
-#: models/foldermodels.py:233
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr "hériter"
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "autoriser"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "refuser"
+
+#: models/foldermodels.py:280
msgid "type"
msgstr "type"
-#: models/foldermodels.py:239
+#: models/foldermodels.py:297
msgid "group"
msgstr "groupe"
-#: models/foldermodels.py:240
+#: models/foldermodels.py:304
msgid "everybody"
msgstr "tous"
-#: models/foldermodels.py:242
-msgid "can edit"
-msgstr "peut éditer"
-
-#: models/foldermodels.py:243
+#: models/foldermodels.py:309
msgid "can read"
msgstr "peut lire"
-#: models/foldermodels.py:244
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "peut éditer"
+
+#: models/foldermodels.py:325
msgid "can add children"
msgstr "peut ajouter un enfant"
-#: models/foldermodels.py:273
+#: models/foldermodels.py:333
msgid "folder permission"
msgstr "permission du dossier"
-#: models/foldermodels.py:274
+#: models/foldermodels.py:334
msgid "folder permissions"
msgstr "permissions du dossier"
-#: models/imagemodels.py:39
-msgid "date taken"
-msgstr "date de prise de vue"
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr "Le dossier ne peut pas être sélectionné avec le type \"tous les éléments\"."
-#: models/imagemodels.py:42
-msgid "default alt text"
-msgstr "texte alternatif par défaut"
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr "Un dossier doit être sélectionné lorsque le type n'est pas \"tous les éléments\"."
-#: models/imagemodels.py:43
-msgid "default caption"
-msgstr "légende par défaut"
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr "Un utilisateur ou un groupe ne peuvent être sélectionnés lorsque \"tout le monde\" est également sélectionné."
-#: models/imagemodels.py:45 templates/image_filer/image.html:6
-msgid "author"
-msgstr "auteur"
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr "Au moins une option parmi un utilisateur, un groupe, ou \"tout le monde\" doit être sélectionnée."
-#: models/imagemodels.py:47
-msgid "must always publish author credit"
-msgstr "attribution à l'auteur toujours publiée"
+#: models/foldermodels.py:360
+#| msgid "Folders"
+msgid "All Folders"
+msgstr "Tous les dossiers"
-#: models/imagemodels.py:48
-msgid "must always publish copyright"
-msgstr "copyright toujours publié"
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr "Chemin logique"
-#: models/imagemodels.py:50
-msgid "subject location"
-msgstr "emplacement du sujet"
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr "Utilisateur : {user}"
-#: models/imagemodels.py:200
-msgid "image"
-msgstr "image"
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr "Groupe : {group}"
-#: models/imagemodels.py:201
-msgid "images"
-msgstr "images"
+#: models/foldermodels.py:375
+#| msgid "everybody"
+msgid "Everybody"
+msgstr "Tout le monde"
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr "Modifier"
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr "Lire"
+
+#: models/foldermodels.py:390
+#| msgid "can add children"
+msgid "Add children"
+msgstr "Ajouter un sous-dossier"
-#: models/virtualitems.py:45
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "unfiled files"
-msgstr "Fichiers non classés"
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "date de prise de vue"
-#: models/virtualitems.py:59
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "auteur"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "doit toujours publier l'attribution à l'auteur"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "doit toujours publier le droit d'auteur"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "largeur en pixels."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "hauteur en pixels."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "options de miniature"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Téléversements non triés"
+
+#: models/virtualitems.py:73
msgid "files with missing metadata"
-msgstr "fichiers aux métadonnées manquantes"
+msgstr "fichiers avec des métadonnées manquantes"
-#: models/virtualitems.py:73 templates/admin/filer/breadcrumbs.html:6
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:10
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
msgid "root"
-msgstr "Dossier racine"
+msgstr "racine"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr "Voir la vue en liste"
+
+#: settings.py:278
+#| msgid "thumbnail option"
+msgid "Show thumbnail view"
+msgstr "Voir la vue avec des miniatures"
-#: templates/admin/filer/actions.html:4
+#: templates/admin/filer/actions.html:5
msgid "Run the selected action"
msgstr "Exécuter l'action sélectionnée"
-#: templates/admin/filer/actions.html:4
+#: templates/admin/filer/actions.html:5
msgid "Go"
msgstr "Envoyer"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
msgid "Click here to select the objects across all pages"
msgstr "Cliquez ici pour sélectionner tous les objets sur l'ensemble des pages"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
#, python-format
msgid "Select all %(total_count)s files and/or folders"
msgstr "Sélectionner tous les %(total_count)s fichiers et/ou dossiers"
-#: templates/admin/filer/actions.html:13
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
msgid "Clear selection"
msgstr "Effacer la sélection"
#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
msgid "Go back to admin homepage"
-msgstr "Retourner à la page d'accueil de l'administrateur."
+msgstr "Retourner à la page d'accueil de l'administration"
#: templates/admin/filer/breadcrumbs.html:4
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
msgid "Home"
msgstr "Accueil"
#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
msgid "Go back to Filer app"
msgstr "Revenir à l'application Filer"
-#: templates/admin/filer/breadcrumbs.html:5
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/image_filer/image_export_form.html:8
-msgid "Filer"
-msgstr "Filer"
-
#: templates/admin/filer/breadcrumbs.html:6
-#: templates/image_filer/image_export_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Go back to root folder"
-msgstr "Retourner au dossier racine"
+msgstr "Revenir au dossier racine"
#: templates/admin/filer/breadcrumbs.html:8
-#: templates/admin/filer/breadcrumbs.html:11
-#: templates/admin/filer/folder/change_form.html:11
-#: templates/image_filer/image_export_form.html:12
-#: templates/image_filer/image_export_form.html:14
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
#, python-format
msgid "Go back to '%(folder_name)s' folder"
-msgstr "Retourner au dossier « %(folder_name)s »"
+msgstr "Revenir au dossier « %(folder_name)s »"
-#: templates/admin/filer/change_form.html:28
-msgid "duplicates"
-msgstr "doublons"
-
-#: templates/admin/filer/delete_confirmation.html:13
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Supprimer l'objet %(object_name)s « %(escaped_object)s » provoquerait la "
-"suppression d'objets liés, mais votre compte ne possède pas la permission de "
-"supprimer les types d'objets suivants :"
-
-#: templates/admin/filer/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the "
-"following protected related objects:"
-msgstr ""
-"Supprimer l'objet %(object_name)s « %(escaped_object)s » provoquerait la "
-"suppression des objets qui lui sont liés, mais votre compte ne possède pas "
-"la permission de supprimer les types d'objets suivants :"
-
-#: templates/admin/filer/delete_confirmation.html:29
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Voulez vous vraiment supprimer l'objet %(object_name)s « %(escaped_object)s "
-"» ? Les éléments suivants sont liés à celui-ci et seront aussi supprimés :"
-
-#: templates/admin/filer/delete_confirmation.html:34
-#: templates/admin/filer/delete_selected_files_confirmation.html:45
-msgid "Yes, I'm sure"
-msgstr "Oui, je suis sûr(e)."
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplicatas"
#: templates/admin/filer/delete_selected_files_confirmation.html:11
msgid ""
"Deleting the selected files and/or folders would result in deleting related "
"objects, but your account doesn't have permission to delete the following "
"types of objects:"
-msgstr ""
-"Supprimer les fichier et/ou dossiers sélectionnés provoquerait la "
-"suppression d'objets liés, mais votre compte ne possède pas la permission de "
-"supprimer les types d'objets suivants :"
+msgstr "Supprimer les fichiers et/ou dossiers sélectionnés devrait provoquer la suppression des objets liés, mais votre compte n'a pas les permissions nécessaires pour supprimer les types d'objets suivants :"
#: templates/admin/filer/delete_selected_files_confirmation.html:19
msgid ""
"Deleting the selected files and/or folders would require deleting the "
"following protected related objects:"
-msgstr ""
-"Supprimer les fichiers et/ou dossiers provoquerait la suppression des "
-"objetsliés protégés suivants :"
+msgstr "Supprimer les fichiers et/ou dossiers provoquera la suppression des objets liés protégés suivants :"
#: templates/admin/filer/delete_selected_files_confirmation.html:27
msgid ""
"Are you sure you want to delete the selected files and/or folders? All of "
"the following objects and their related items will be deleted:"
-msgstr ""
-"Voulez vous vraiment supprimer l'objet les fichiers et/ou dossiers "
-"sélectionnés ? Les éléments suivants sont liés à celui-ci et seront aussi "
-"supprimés :"
+msgstr "Voulez-vous vraiment supprimer les fichiers et/ou dossiers sélectionnés ? Tous les objets suivants et leurs éléments liés seront supprimés :"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:7
-#: templates/image_filer/image_export_form.html:8
-#: templates/image_filer/image_export_form.html:16
-msgid "Go back to"
-msgstr "Retourner à"
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Non, faites-moi revenir"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
-msgid "admin homepage"
-msgstr "page d'accueil de l'administrateur"
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Oui, je suis sûr"
-#: templates/admin/filer/folder/change_form.html:22
-#: templates/admin/filer/image/change_form.html:9
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
msgid "History"
msgstr "Historique"
+#: templates/admin/filer/file/change_form.html:37
#: templates/admin/filer/folder/change_form.html:23
-#: templates/admin/filer/image/change_form.html:10
+#: templates/admin/filer/image/change_form.html:37
msgid "View on site"
msgstr "Voir sur le site"
-#: templates/admin/filer/folder/change_form.html:35
-#: templates/admin/filer/folder/directory_listing.html:75
-#: templates/admin/filer/folder/directory_listing.html:85
-#: templates/admin/filer/folder/directory_table.html:23
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Retourner à"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "page d'accueil de l'administrateur"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
msgid "Folder Icon"
msgstr "Icône du dossier"
-#: templates/admin/filer/folder/choose_copy_destination.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:23
msgid ""
-"Your account doesn't have permissions to copy all of the selected files and/"
-"or folders."
-msgstr ""
-"Votre compte n'a pas les permissions nécessaires pour copier tous lesfichers "
-"et/ou dossiers sélectionnés."
-
-#: templates/admin/filer/folder/choose_copy_destination.html:15
-#: templates/admin/filer/folder/choose_move_destination.html:15
+"Your account doesn't have permissions to copy all of the selected files "
+"and/or folders."
+msgstr "Votre compte n'a pas les permissions nécessaires pour copier tous les fichiers et/ou dossiers sélectionnés."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Retour"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
msgid "There are no destination folders available."
msgstr "Aucun dossier de destination disponible."
-#: templates/admin/filer/folder/choose_copy_destination.html:18
+#: templates/admin/filer/folder/choose_copy_destination.html:35
msgid "There are no files and/or folders available to copy."
-msgstr "Aucun fichier ou dossier n'estss disponible à copier."
+msgstr "Aucun fichier ou dossier n'est disponible à copier."
-#: templates/admin/filer/folder/choose_copy_destination.html:20
+#: templates/admin/filer/folder/choose_copy_destination.html:40
msgid ""
"The following files and/or folders will be copied to a destination folder "
"(retaining their tree structure):"
-msgstr ""
-"Les fichiers et/ou dossiers suivants seront copiés vers un dossier de "
-"destination (en conservant leur arborescence) :"
+msgstr "Les fichiers et/ou dossiers suivants seront copiés vers un dossier de destination (en conservant leur arborescence) :"
-#: templates/admin/filer/folder/choose_copy_destination.html:32
-#: templates/admin/filer/folder/choose_move_destination.html:32
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
msgid "Destination folder:"
msgstr "Dossier de destination :"
-#: templates/admin/filer/folder/choose_copy_destination.html:39
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
msgid "Copy"
msgstr "Copier"
-#: templates/admin/filer/folder/choose_images_resize_options.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Il est impossible de copier des fichiers dans le même dossier"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
msgid ""
"Your account doesn't have permissions to resize all of the selected images."
-msgstr ""
-"Votre compte na pas les permissions necessaires pour redimensionner toutes "
-"les images sélectionnées."
+msgstr "Votre compte na pas les permissions nécessaires pour redimensionner toutes les images sélectionnées."
-#: templates/admin/filer/folder/choose_images_resize_options.html:15
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
msgid "There are no images available to resize."
msgstr "Il n'y a aucune image disponible à redimensionner."
-#: templates/admin/filer/folder/choose_images_resize_options.html:17
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
msgid "The following images will be resized:"
msgstr "Les images suivantes seront redimensionnées :"
-#: templates/admin/filer/folder/choose_images_resize_options.html:30
-msgid "Choose an existing thumbnail option or enter resize parameters:"
-msgstr ""
-"Choisissez une option de miniature ou entrez des paramètres de "
-"redimensionnement :"
-
#: templates/admin/filer/folder/choose_images_resize_options.html:32
-msgid "Choose resize parameters:"
-msgstr "Choisissez des paramètres de redimensionnement :"
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "Choisissez une option de miniature existante ou entrez des paramètres de redimensionnement :"
-#: templates/admin/filer/folder/choose_images_resize_options.html:35
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
msgid ""
"Warning: Images will be resized in-place and originals will be lost. Maybe "
"first make a copy of them to retain the originals."
-msgstr ""
-"Avertissement : Le redimensionnement des images écrasera les originaux. "
-"Faites en éventuellement une copie afin de conserver les originaux."
+msgstr "Avertissement : Les images seront redimensionnées en place et les originales seront perdues. Faites-en éventuellement une copie préalable afin de les conserver."
-#: templates/admin/filer/folder/choose_images_resize_options.html:36
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
msgid "Resize"
msgstr "Redimensionner"
-#: templates/admin/filer/folder/choose_move_destination.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:35
msgid ""
-"Your account doesn't have permissions to move all of the selected files and/"
-"or folders."
-msgstr ""
-"Votre compte n'a pas les permissions nécessaires pour déplacer tous les "
-"fichiers et/ou dossiers sélectionnés."
+"Your account doesn't have permissions to move all of the selected files "
+"and/or folders."
+msgstr "Votre compte n'a pas les permissions nécessaires pour déplacer tous les fichiers et/ou dossiers sélectionnés."
-#: templates/admin/filer/folder/choose_move_destination.html:18
+#: templates/admin/filer/folder/choose_move_destination.html:47
msgid "There are no files and/or folders available to move."
-msgstr "Il n'y a pas de fichiers et/ou de dossiers disponibles à déplacer."
+msgstr "Il n'y a pas de fichiers et/ou dossiers disponibles à déplacer."
-#: templates/admin/filer/folder/choose_move_destination.html:20
+#: templates/admin/filer/folder/choose_move_destination.html:52
msgid ""
"The following files and/or folders will be moved to a destination folder "
"(retaining their tree structure):"
-msgstr ""
-"Les fichiers et/ou dossiers suivants seront déplacés vers un dossier de "
-"destination (en conservant leur arborescence) :"
+msgstr "Les fichiers et/ou dossiers suivants seront déplacés vers un dossier de destination (en conservant leur arborescence) :"
-#: templates/admin/filer/folder/choose_move_destination.html:38
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
msgid "Move"
msgstr "Déplacer"
-#: templates/admin/filer/folder/choose_rename_format.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Il est impossible de déplacer des fichiers dans le même dossier"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
msgid ""
"Your account doesn't have permissions to rename all of the selected files."
-msgstr ""
-"Votre compte n'a pas les permissions nécessaires pour renommer tous les "
-"fichiers sélectionnés."
+msgstr "Votre compte n'a pas les permissions nécessaires pour renommer tous les fichiers sélectionnés."
-#: templates/admin/filer/folder/choose_rename_format.html:15
+#: templates/admin/filer/folder/choose_rename_format.html:18
msgid "There are no files available to rename."
msgstr "Il n'y a pas de fichiers disponibles à renommer."
-#: templates/admin/filer/folder/choose_rename_format.html:17
+#: templates/admin/filer/folder/choose_rename_format.html:20
msgid ""
"The following files will be renamed (they will stay in their folders and "
"keep original filename, only displayed filename will be changed):"
-msgstr ""
-"Les fichiers suivants seront renommés (ils resteront dans leurs dossiers et "
-"conserveront leur nom de fichier d'origine ; seul le nom affiché sera "
-"changé) :"
+msgstr "Les fichiers suivants seront renommés (ils resteront dans leurs dossiers et conserveront leur nom de fichier d'origine ; seul le nom affiché sera changé) :"
-#: templates/admin/filer/folder/choose_rename_format.html:54
+#: templates/admin/filer/folder/choose_rename_format.html:59
msgid "Rename"
msgstr "Renommer"
-#: templates/admin/filer/folder/directory_listing.html:66
-msgid "Adds a new Folder"
-msgstr "Ajoute un nouveau Dossier"
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Retourner au dossier parent"
-#: templates/admin/filer/folder/directory_listing.html:66
-#: templates/image_filer/include/export_dialog.html:34
-msgid "New Folder"
-msgstr "Nouveau Dossier"
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Modifier les détails du dossier actuel"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "upload files"
-msgstr "transférer des fichiers"
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Modifier"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "Upload"
-msgstr "Transférer"
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Cliquez ici pour lancer la recherche pour la phrase saisie"
-#: templates/admin/filer/folder/directory_listing.html:74
-msgid "Go back to the parent folder"
-msgstr "Retourner au dossier parent"
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Rechercher"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:18
-#, python-format
-msgid "1 folder"
-msgid_plural "%(counter)s folders"
-msgstr[0] "1 dossier"
-msgstr[1] "%(counter)s dossiers"
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Fermer"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:19
-#, python-format
-msgid "1 file"
-msgid_plural "%(counter)s files"
-msgstr[0] "1 fichier"
-msgstr[1] "%(counter)s fichiers"
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limite"
-#: templates/admin/filer/folder/directory_listing.html:80
-msgid "Change current folder details"
-msgstr "Modifie les détails du dossier courant"
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Cochez pour limiter la recherche au dossier actuel"
-#: templates/admin/filer/folder/directory_listing.html:80
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:43
-msgid "Change"
-msgstr "Modifier"
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Limiter la recherche au dossier actuel"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Supprimer"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Ajoute un nouveau dossier"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Nouveau dossier"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Téléverser des fichiers"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Vous devez d'abord sélectionner un dossier"
-#: templates/admin/filer/folder/directory_table.html:13
+#: templates/admin/filer/folder/directory_table_list.html:16
msgid "Name"
msgstr "Nom"
-#: templates/admin/filer/folder/directory_table.html:23
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:29
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Propriétaire"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Taille"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Action"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
#, python-format
msgid "Change '%(item_label)s' folder details"
msgstr "Modifier les détails du dossier « %(item_label)s »"
-#: templates/admin/filer/folder/directory_table.html:30
-#: templates/admin/filer/folder/directory_table.html:45
-msgid "Owner"
-msgstr "Propriétaire"
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s folder"
+msgstr[1] "%(counter)s folders"
+msgstr[2] "%(counter)s folders"
-#: templates/admin/filer/folder/directory_table.html:37
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s fichier"
+msgstr[1] "%(counter)s fichiers"
+msgstr[2] "%(counter)s fichiers"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Changer les détails du dossier"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Supprimer le dossier"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
msgid "Select this file"
msgstr "Sélectionner ce fichier"
-#: templates/admin/filer/folder/directory_table.html:39
-#: templates/admin/filer/folder/directory_table.html:43
-#: templates/admin/filer/folder/directory_table.html:44
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
#, python-format
msgid "Change '%(item_label)s' details"
msgstr "Change les détails de « %(item_label)s »"
-#: templates/admin/filer/folder/directory_table.html:42
-#, python-format
-msgid "Delete '%(item_label)s'"
-msgstr "Supprimer « %(item_label)s »"
-
-#: templates/admin/filer/folder/directory_table.html:42
-msgid "Delete"
-msgstr "Supprimer"
-
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "Permissions"
msgstr "Permissions"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "disabled"
msgstr "désactivé"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "enabled"
msgstr "activé"
-#: templates/admin/filer/folder/directory_table.html:50
-msgid "Move to clipboard"
-msgstr "Déplacer vers le presse-papiers"
+#: templates/admin/filer/folder/directory_table_list.html:144
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "L'URL a été copiée dans le presse-papier"
-#: templates/admin/filer/folder/directory_table.html:58
-msgid "there are no files or subfolders"
-msgstr "il n'y a pas de fichiers ou de sous-dossiers"
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Canonical url '%(item_label)s'"
+msgstr "url canonique '%(item_label)s' "
-#: templates/admin/filer/folder/directory_table.html:65
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Download '%(item_label)s'"
+msgstr "Télécharger '%(item_label)s' "
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Supprimer le fichier"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Déposez des fichiers ici ou utilisez le bouton « Téléverser des fichiers »"
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Déposez votre fichier à téléverser dans :"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Téléverser"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "annuler"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Téléversement réussi !"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Téléversement annulé !"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
msgid "previous"
msgstr "précédent"
-#: templates/admin/filer/folder/directory_table.html:69
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
#, python-format
-msgid ""
-"\n"
-" Page %(number)s of %(num_pages)s.\n"
-" "
-msgstr ""
-"\n"
-" Page %(number)s de %(num_pages)s.\n"
-" "
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Page %(number)s sur %(num_pages)s."
-#: templates/admin/filer/folder/directory_table.html:75
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
msgid "next"
msgstr "suivant"
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Sélectionner les %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+#| msgid "Select this file"
+msgid "Select all"
+msgstr "Tout sélectionner"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+#| msgid "Filer"
+msgid "Files"
+msgstr "Fichiers"
+
#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
msgid "Add new"
-msgstr "Ajouter nouveau"
+msgstr "Ajouter un nouveau"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Django site admin"
-#: templates/admin/filer/folder/new_folder_form.html:13
+#: templates/admin/filer/folder/new_folder_form.html:15
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
msgstr[0] "Veuillez corriger l'erreur suivante."
msgstr[1] "Veuillez corriger les erreurs suivantes."
+msgstr[2] "Veuillez corriger les erreurs suivantes."
-#: templates/admin/filer/folder/new_folder_form.html:28
+#: templates/admin/filer/folder/new_folder_form.html:30
msgid "Save"
msgstr "Sauvegarder"
-#: templates/admin/filer/image/change_form.html:21
-msgid "Full size preview"
-msgstr "Afficher en pleine taille"
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr "Votre navigateur ne supporte pas l'audio."
-#: templates/admin/filer/tools/search_form.html:8
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Search"
-msgstr "Rechercher"
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr "Votre navigateur ne supporte pas la vidéo."
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Presse-papiers"
-#: templates/admin/filer/tools/search_form.html:13
-msgid "Enter your search phrase here"
-msgstr "Entrez votre phrase de recherche ici"
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Coller tous les éléments ici"
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Click here to"
-msgstr "Cliquez ici pour"
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Déplacer tous les fichiers du presse-papiers vers"
-#: templates/admin/filer/tools/search_form.html:14
-msgid "run search for entered phrase"
-msgstr "lancer votre recherche"
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Vider le presse-papiers"
-#: templates/admin/filer/tools/search_form.html:15
-msgid "Check it to"
-msgstr "Cochez pour"
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "Le presse-papiers est vide"
-#: templates/admin/filer/tools/search_form.html:15
-#: templates/admin/filer/tools/search_form.html:16
-msgid "limit the search to current folder"
-msgstr "Limiter la recherche au dossier courant"
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "transfert échoué"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr "Télécharger"
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr "Agrandir"
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+#| msgid "file missing"
+msgid "File is missing"
+msgstr "Le fichier est manquant"
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Type"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Taille de fichier"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Modifié"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Créé"
+
+#: templates/admin/filer/tools/search_form.html:5
msgid "found"
msgstr "trouvé :"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/search_form.html:5
msgid "and"
msgstr "et"
-#: templates/admin/filer/tools/search_form.html:19
+#: templates/admin/filer/tools/search_form.html:7
msgid "cancel search"
msgstr "annuler la recherche"
-#: templates/admin/filer/tools/upload_button_js.html:24
-#: templates/admin/filer/widgets/admin_file.html:7
-#: templates/admin/filer/widgets/admin_file.html:8
-msgid "file missing"
-msgstr "fichier manquant"
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Effacer"
-#: templates/admin/filer/tools/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr "Presse-papiers"
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "ou déposez votre fichier ici"
-#: templates/admin/filer/tools/clipboard/clipboard.html:19
-msgid "Paste all items here"
-msgstr "Coller tous les éléments ici"
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "pas de fichier sélectionné"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "discard"
-msgstr "Vider"
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Recherche"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "Move all clipboard files to"
-msgstr "Déplacer tous les fichiers du presse-papiers vers"
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Sélectionner un fichier"
-#: templates/admin/filer/tools/clipboard/clipboard.html:43
-msgid "the clipboard is empty"
-msgstr "Le presse-papiers est vide"
+#: templates/admin/filer/widgets/admin_folder.html:16
+#| msgid "Choose File"
+msgid "Choose Folder"
+msgstr "Choisissez un dossier"
-#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:11
-msgid "upload failed"
-msgstr "transfert échoué"
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr "Fichier \"{file_name}\" : Hébergement refusé par la politique de sécurité du site"
-#: templates/admin/filer/widgets/admin_file.html:11
-msgid "no file selected"
-msgstr "pas de fichier sélectionné"
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr "Fichier \"{file_name}\" : hébergement de {file_type} refusé par la politique de sécurité du site"
-#: templates/admin/filer/widgets/admin_file.html:14
-#: templates/admin/filer/widgets/admin_file.html:15
-#: templates/admin/filer/widgets/admin_folder.html:7
-#: templates/admin/filer/widgets/admin_folder.html:8
-msgid "Lookup"
-msgstr "Recherche"
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr "Fichier \"{file_name}\" : hébergement HTML refusé par la politique de sécurité du site"
-#: templates/admin/filer/widgets/admin_file.html:17
-#: templates/admin/filer/widgets/admin_folder.html:10
-msgid "Clear"
-msgstr "Effacer"
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr "Fichier \"{file_name}\" : Rejeté à cause d'une potentielle vulnérabilité de cross-site scripting"
-#: templates/admin/filer/widgets/admin_folder.html:5
-msgid "none selected"
-msgstr "aucune sélection"
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr "Fichier \"{file_name}\": le format de fichier SVG n'est pas reconnu"
-#: templates/image_filer/folder.html:3
-#, python-format
-msgid "Folder '%(folder_label)s' files"
-msgstr "Fichiers du dossier « %(folder_label)s »"
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
-#: templates/image_filer/folder.html:6
-msgid "File name"
-msgstr "Nom de fichier"
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
-#: templates/image_filer/image_export_form.html:17
-msgid "export"
-msgstr "exporter"
+#~ msgid "Open file"
+#~ msgstr "Open file"
-#: templates/image_filer/image_export_form.html:27
-msgid "download image"
-msgstr "télécharger l'image"
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
-#: templates/image_filer/include/export_dialog.html:13
-msgid "Folder name already taken."
-msgstr "Nom de dossier déjà utilisé."
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
-#: templates/image_filer/include/export_dialog.html:15
-msgid "Submit"
-msgstr "Envoyer"
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/gl/LC_MESSAGES/django.mo b/filer/locale/gl/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..888daadd0
Binary files /dev/null and b/filer/locale/gl/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/gl/LC_MESSAGES/django.po b/filer/locale/gl/LC_MESSAGES/django.po
new file mode 100644
index 000000000..57767645d
--- /dev/null
+++ b/filer/locale/gl/LC_MESSAGES/django.po
@@ -0,0 +1,1228 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Pablo, 2015
+# Pablo, 2015
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Pablo, 2015\n"
+"Language-Team: Galician (http://app.transifex.com/divio/django-filer/"
+"language/gl/)\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Avanzado"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s seleccionados"
+msgstr[1] "Os %(total_count)s seleccionados"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 de %(cnt)s seleccionados"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Ningunha acción seleccionada."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "Movéronse correctamente %(count)d arquivos ao portapapeis."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Mover arquivos seleccionados ao portapapeis."
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Non se poden borrar arquivos e/ou carpetas"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Estás seguro?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Borrar arquivos e/ou carpetas"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Mover alquivos e/ou carpetas"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Mover arquivos e/ou carpetas seleccionados"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Copiar arquivos e/ou carpetas"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Copiar arquivos e/ou carpetas seleccionados"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Cambiar o tamaño das imaxes"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Cambiar o tamaño das imaxes seleccionadas"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Formato para o cambio de nome non válido: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "opción da miniatura"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "ancho"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "alto"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "recortar"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "ampliar"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "texto alternativo por defecto"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "lenda por defecto"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "imaxe"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "imaxes"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "usuario"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "arquivos"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "portapapeis"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "portapapeis"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "arquivo"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "elemento do portapapeis"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "elementos do portapapeis"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "carpeta"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "tamaño do arquivo"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "ten todos os datos obrigatorios"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "nome do arquivo orixinal"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "nome"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "descrición"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "propietario"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "subido a"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "modificado o"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Permisos desactivados"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "creado o"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Carpeta"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Carpetas"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "todos os elementos"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "só este elemento"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "este elemento e todos os fillos"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "tipo"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "grupo"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "todos"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "pode ler"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "pode editar"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "pode engadir fillos"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "permiso da carpeta"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "permisos da carpeta"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "data"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Mover arquivos seleccionados ao portapapeis."
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "atopado"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "e"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/he/LC_MESSAGES/django.mo b/filer/locale/he/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..f1dc779e0
Binary files /dev/null and b/filer/locale/he/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/he/LC_MESSAGES/django.po b/filer/locale/he/LC_MESSAGES/django.po
new file mode 100644
index 000000000..6bd35b217
--- /dev/null
+++ b/filer/locale/he/LC_MESSAGES/django.po
@@ -0,0 +1,1249 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Hebrew (http://app.transifex.com/divio/django-filer/language/"
+"he/)\n"
+"Language: he\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % "
+"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "מתקדם"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr "יש לבחור פריטים על מנת לבצע עליהם פעולות. לא בוצעו פעולות."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "אחד נבחר"
+msgstr[1] "כל ה-%(total_count)s נבחרו"
+msgstr[2] "כל ה-%(total_count)s נבחרו"
+msgstr[3] "כל ה-%(total_count)s נבחרו"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 מתוך %(cnt)s נבחרו"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "לא נבחרה פעולה."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "הועברו בהצלחה %(count)d קבצים ללוח"
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "העבר קבצים שנבחרו ללוח"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "בוטלו בהצלחה הרשאות עבור %(count)d קבצים."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "אופשרו בהצלחה הרשאות עבור %(count)d קבצים."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "אופשרו הרשאות עבור קבצים בחורים"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "בוטלו הרשאות עבור קבצים בחורים"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "נמחקו בהצלחה %(count)d קבצים ו/או תיקיות."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "לא ניתן למחוק קבצים ו/או תיקיות"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "האם את/ה בטוח/ה?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "מחק קבצים ו/או תיקיות"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "מחק קבצים ו/או תיקיות בחורים"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "הועברו בהצלחה %(count)d קבצים ו/או תיקיות לתיקיה '%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "העבר קבצים ו/או תיקיות"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "העבר קבצים ו/או תיקיות בחורים"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "שונו בהצלחה שמותיהם של %(count)d קבצים."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "שנה שמות קבצים"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "הועתקו בהצלחה %(count)d קבצים ו/או תיקיות לתיקיה '%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "העתק קבצים ו/או תיקיות"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "העתק קבצים ו/או תיקיות בחורים"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "שונה בהצלחה גודלם של %(count)d תמונות."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "שנה גודל תמונות"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "שנה גודל תמונות בחורות"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "סיומת אשר תתווסף לשמות קבצים שהועתקו."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr "על הסיומת להיות תקינה, פשוטה ובאותיות קטנות, כגון \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "ערך מפתח תבנית שינוי השם \"%(key)s\". אינו חוקי."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "תבנית שינוי שם לא תקינה: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "אפשרות תמונה ממוזערת"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "רוחב"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "גובה"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "חיתוך"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "הגדל"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "עליך לבחור אפשרות תמונה ממוזערת או פרמטרי שינוי גודל."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "מיקום נושא"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "תיקיה בשם זה כבר קיימת."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "טקסט חלופי ברירת מחדל"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "כותרת ברירת מחדל"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "מיקום נושא"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "תמונה"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "תמונות"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "משתמש"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "קבצים"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "לוח"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "לוחות"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "קובץ"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "פריט לוח"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "פריטי לוח"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "תיקיה"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "גודל קובץ"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "כל המידע הנחוץ קיים"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "שם קובץ מקורי"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "שם"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "תיאור"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "בעלים"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "הועלה ב-"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "שונה ב-"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "הרשאות בוטלו"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "נוצר ב-"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "תיקיה"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "תיקיות"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "כל הפריטים"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "פריט זה בלבד"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "פריט זה וכל ילדיו"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "סוג"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "קבוצה"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "כל אחד"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "רשאי לקרוא"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "רשאי לערוך"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "רשאי להוסיף ילדים"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "הרשאת תיקיה"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "הרשאות תיקיה"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "תאריך צילום"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "מחבר"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "חייב תמיד לפרסם קרדיט מחבר"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "חייב תמיד לפרסם זכויות יוצרים"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "קבצים עם מטה נתונים חסרים"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "שורש"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "הרץ את הפעולה הבחורה"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "בצע"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "לחץ כאן כדי לבחור את האובייקטים על פני כל הדפים"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "בחר את כל ה- %(total_count)s קבצים ו/או התיקיות"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "נקה בחירה"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "חזור לדף הניהול הראשי"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "בית"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "חזור לאפליקציית Filer"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "חזור לתיקיית השורש"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "חזור לתיקיה '%(folder_name)s'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"עבור מחיקת הקבצים ו/או התיקיות הבחורים יש צורך למחוק אובייקטים מקושרים, אך "
+"לחשבונך אין הרשאות למחוק אובייקטים מהסוגים הבאים:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"עבור מחיקת הקבצים ו/או התיקיות הבחורים יש צורך למחוק את האובייקטים המוגנים "
+"הבאים:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"האם את/ה בטוח/ה שברצונך למחוק את הקבצים ו/או התיקיות הבחורים? כל הפריטים "
+"המקושרים יימחקו:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "היסטוריה"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "צפה בתוך האתר"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "חזור ל-"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "דף הניהול הראשי"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "צלמית תיקייה"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr "לחשבונך אין רשות להעתיק את כל הקבצים ו/או התיקיות הבחורים."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "אין תיקיות יעד זמינות."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "אין קבצים ו/או תיקיות זמינים להעתקה."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"הקבצים ו/או התיקיות הבאים יועתקו לתיקיית יעד (תוך שמירה על מבנה העץ שלהם):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "תיקיית יעד:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "העתק"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "לחשבונך אין רשות לשנות גודלן של כל התמונות הבחורות."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "אין תמונות זמינות לשינוי גודלן."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "התמונות הבאות ישונה גודלן:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "בחר אפשרות תמונה ממוזערת קיימת או הזן פרמטרי שינוי גודל:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"הזהרה: התמונות ישונה גודלן במקום והמקוריות יאבדו. אולי ראשית עשה/י העתק שלהם "
+"כדי לשמור על המקויות."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "שנה גודל"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr "לחשבונך אין רשות להעביר את כל הקבצים ו/או התיקיות הבחורים."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "אין קבצים ו/או תיקיות זמינים להעברה."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"הקבצים ו/או התיקיות הבאים יועברו לתיקיית יעד (תוך שמירה על מבנה העץ שלהם):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "העבר"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "לחשבונך אין רשות לשנות שמם של כל הקבצים הבחורים."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "אין קבצים זמינים לשינוי שמם."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"הקבצים הבאים ישונו שמותיהם (הם יישארו בתיקיות הנוכחיות שלהם ושמם המקורי "
+"יישאר - רק שמות התצוגה שלהם ישונו):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "שנה שם"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "חזור לתיקיה ההורה"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "שנה פרטי תיקיה נוכחית"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "שנה"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "חיפוש"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "מחק"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "מוסיף תיקיה חדשה"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "תיקיה חדשה"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "שם"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "בעלים"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "שנה פרטי תיקיה של '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "בחר קובץ זה"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "שנה פרטים של '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "הרשאות"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "מבוטל"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "מאופשר"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "העבר קבצים שנבחרו ללוח"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "העלאה"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "הקודם"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "הבא"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "הוסף חדש"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "אנא תקן/י את הטעות מטה."
+msgstr[1] "אנא תקן/י את הטעויות מטה."
+msgstr[2] "אנא תקן/י את הטעויות מטה."
+msgstr[3] "אנא תקן/י את הטעויות מטה."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "שמור"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "לוח"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "הדבק את כל הפריטים כאן"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "העבר את כל קבצי הלוח ל-"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "הלוח ריק"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "העלאה נכשלה"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "נמצא"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "וגם"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "בטל חיפוש"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "נקה"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "אף קובץ לא נבחר"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "חיפוש"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+#~ msgstr[3] "15c0f2d28d6dab1af1f6d94906beb627_pl_3"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/hr/LC_MESSAGES/django.mo b/filer/locale/hr/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..8a2e68474
Binary files /dev/null and b/filer/locale/hr/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/hr/LC_MESSAGES/django.po b/filer/locale/hr/LC_MESSAGES/django.po
new file mode 100644
index 000000000..956d76841
--- /dev/null
+++ b/filer/locale/hr/LC_MESSAGES/django.po
@@ -0,0 +1,1265 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Aleks Acimovic, 2022
+# Damir , 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Aleks Acimovic, 2022\n"
+"Language-Team: Croatian (http://app.transifex.com/divio/django-filer/"
+"language/hr/)\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Napredno"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Stavke moraju biti odabrane kako bi se obavila akcija. Nijedna stavka nije "
+"promijenjena."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s odabrana"
+msgstr[1] "%(total_count)s odabrano"
+msgstr[2] "Svih %(total_count)s odabrano"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Popis direktorija za %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 od %(cnt)s odabrano"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Nije izabrana akcija."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "Uspješno premješteno %(count)d datoteka u spremnik."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Premjesti odabrane datoteke u spremnik"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Uspješno onemogućene ovlasti za %(count)d datoteka."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Uspješno omogućene ovlasti za %(count)d datoteka."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Omogući ovlasti za odabrane datoteke"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Onemogući ovlasti za odabrane datoteke"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "Uspješno obrisano %(count)d datoteka i/ili direktorija."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Nije moguće obrisati datoteke i/ili direktorije"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Jeste li sigurni?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Obriši datoteke i/ili direktorije"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Obriši odabrane datoteke i/ili direktorije"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Uspješno premješteno %(count)d datoteka i/ili direktorija u direktorij "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Premjesti datoteke i/ili direktorije"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Premjesti odabrane datoteke i/ili direktorije"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "Uspješno preimenovano %(count)d datoteka."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Preimenuj datoteke"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Uspješno kopirano %(count)d datoteka i/ili direktorija u direktorij "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Kopiraj datoteke i/ili direktorije"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Kopiraj odabrane datoteke i/ili direktorije"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Uspješno promijenjena veličina za %(count)d slika."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Promijeni veličinu slika"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Promijeni veličinu odabranih slika"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Sufiks koji će biti dodan imenima kopiranih datoteka."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Sufiks treba biti jednostavan i upisan malim slovima poput \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Nepoznata vrijednost formata ključa za preimenovanje \"%(key)s\"."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Neispravan format za premenovanje: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "opcija sličica"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "širina"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "visina"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "obreži"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "povećaj veličinu"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+"Opcija sličica ili parametri za promjenu veličine moraju biti izabrani."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Lokacija subjekta"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Direktorij s ovim imenom već postoji."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "predefinirani alt tekst"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "predefinirani opis slike"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "lokacija subjekta"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "slika"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "slike"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "korisnik"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "datoteke"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "spremnik"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "spremnici"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "datoteka"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "stavka spremnika"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "stavke spremnika"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "direktorij"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "veličina datoteke"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "sadrži sve obavezne podatke"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "originalno ime datoteke"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "ime"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "opis"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "vlasnik"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "postavljeno"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "modificirano"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Ovlasti onemogućene"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "kerirano"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Direktorij"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Direktoriji"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "sve stavke"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "samo ova stavka"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "ova stavka i sva djeca"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "tip"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "grupa"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "svi"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "mogu čitati"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "mogu uređivati"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "mogu dodavati djecu"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "ovlast direktorija"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "ovlasti direktorija"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "datum nastanka"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "zahtijeva se objavljivanje zasluga autora"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "zahtjeva se objavljivanje autorskih prava"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "datoteke s nedostajućim metapodacima"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "korijenski"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Pokreni odabranu akciju"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Idi"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Kliknite ovdje za odabir objekata kroz sve stranice"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Odaberite sve %(total_count)s datoteke i/ili direktorije"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Poništi odabir"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Povratak na početnu stranicu"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Početna"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Povratak na Filer aplikaciju"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Povratak na korijenski direktorij"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Povratak na direktorij '%(folder_name)s'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Brisanje odabranih objekata bi rezultiralo brisanjem povezanih objekata, ali "
+"Vaš korisnički račun nema ovlasti za brisanje slijedećih tipova objekata:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Brisanje odabranih datoteka i/ili direktorija bi zahtijevalo brisanje "
+"slijedećih zaštičenih povezanih objekata:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Jeste li sigurni kako želite obrisati odabrane datoteke i/ili direktorije? "
+"Svi navedeni objekti i s njima povezane stavke biti će obrisani:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Povijest"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Pogledaj na stranicama"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Idi natrag na"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "početna stranica administracije"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Ikona direktorija"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+"Vaš korisnički račun nema ovlasti za kopiranje odabranih datoteka i/ili "
+"direktorija."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Nema dostupnih odredišnih direktorija."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Nema dostupnih datoteka i/ili direktorija za kopiranje."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Slijedeće datoteke i/ili direktoriji biti će kopirani u odredišni direktorij "
+"(zadržavajući postojeću strukturu):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Odredišni direktorij"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopiraj"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+"Vaš korisnički račun nema ovlasti za promjenu veličina odabranih slika."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Nema dostupnih slika kojima bi se promijenila veličina."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Slijedećim slikama biti će promijenjena veličina:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Izaberite postojeću opciju sličica ili unesite parametre za promjenu "
+"veličine:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Pažnja: Slikama će biti promijenjena veličina, a originali će biti prepisani "
+"sa slikama s novom veličinom. Preporuča se prvo kopirati originalne slike "
+"prije promjene veličine."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Promjeni veličinu"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Vaš korisnički račun nema ovlasti za premještaj svih odabranih datoteka i/"
+"ili direktorija."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Nema dostupnih datoteka i/ili direktorija za premještaj."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Slijedeće datoteke i/ili direktoriji biti će premješteni u odredišni "
+"direktorij (zadržavajući postojeću strukturu):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Premjesti"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+"Vaš korisnički račun nema ovlasti za preimenovanje svih odabranih datoteka."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Nema dostupnih datoteka i/ili direktorija za preimenovanje."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"Slijedeće datoteke če biti preimenovane (ostati će u svojim direktorijima i "
+"zadržati ime datoteke, samo će prikazano ime biti promijenjeno):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Preimenuj"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Vrati se u nadređeni direktorij"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Promijeni detalje trenutnog direktorija"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Promijeni"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Traži"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Obriši"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Dodaje novi direktorij"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Novi direktorij"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Ime"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Vlasnik"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Promijeni detalje direktorija '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Odaberi ovu datoteku"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Promijeni detalje za '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Ovlasti"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "onemogućeno"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "omogućeno"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Premjesti odabrane datoteke u spremnik"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Prebaci"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "prethodni"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "slijedeći"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Dodaj novi"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Molimo ispravite pogrešku ispod."
+msgstr[1] "Molimo ispravite pogreške ispod."
+msgstr[2] "Molimo ispravite pogreške ispod."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Spremi"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Privremeni spremnik"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Premjesti sve stavke ovdje"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Premjesti sve datoteke iz privremenog spremnika u"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "privremeni spremnik je prazan"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "prebacivanje neuspješno"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "pronađeno"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "i"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "poništi pretraživanje"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Isprazni"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "nema odabranih datoteka"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Pregled"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/hu/LC_MESSAGES/django.mo b/filer/locale/hu/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..4f949fb53
Binary files /dev/null and b/filer/locale/hu/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/hu/LC_MESSAGES/django.po b/filer/locale/hu/LC_MESSAGES/django.po
new file mode 100644
index 000000000..80b195895
--- /dev/null
+++ b/filer/locale/hu/LC_MESSAGES/django.po
@@ -0,0 +1,1258 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Istvan Farkas , 2016-2017
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Istvan Farkas , 2016-2017\n"
+"Language-Team: Hungarian (http://app.transifex.com/divio/django-filer/"
+"language/hu/)\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Haladó"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "egyedi URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Az akciók végrehajtásához egy vagy több elemet ki kell választani. Egyetlen "
+"elem sem változott."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s kiválasztva"
+msgstr[1] "Mind (%(total_count)s) kiválasztva"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 kiválasztva a %(cnt)s elemből"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Nincs akció megadva"
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "%(count)d fájl a vágólapra mozgatva."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Kiválasztott fájlok vágólapra mozgatása"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "%(count)d fájl jogosultságai kikapcsolva."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "%(count)d fájl jogosultságai bekapcsolva."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Jogosultságok bekapcsolása a kiválasztott fájlokhoz"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Jogosultságok kikapcsolása a kiválasztott fájlokhoz"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "%(count)d fájl és/vagy mappa sikeresen törölve."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Nem lehet a mappákat és/vagy fájlokat törölni"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Biztos benne?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Fájlok és/vagy mappák törlése"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Kiválasztott fájlok és/vagy mappák törlése"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "A kiválasztott helyen már létezik %s nevű mappa"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"%(count)d fájl és/vagy mappa sikeresen átmozgatva ebbe a mappába: "
+"%(destination)s"
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Fájlok és/vagy mappák mozgatása"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Kiválasztott fájlok és/vagy mappák mozgatása"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "%(count)d fájl sikeresen átnevezve."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Fájlok átnevezése"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"%(count)d fájl és/vagy mappa sikeresen átmásolva ebbe a mappába: "
+"%(destination)s"
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Fájlok és/vagy mappák másolása"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Kiválasztott fájlok és/vagy mappák másolása"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "%(count)d kép sikeresen átméretezve."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Képek átméretezése"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Kiválasztott képek átméretezése"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Utótag, amely a másolt fájlok nevéhez lesz hozzáadva."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Az utótag lehetőleg egyszerű, kisbetűs fájlnév részlet legyen, például "
+"\"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Ismeretlen átnevezés formázási szó: \"%(key)s\" "
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Érvénytelen átnevezési formátum: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "előnézeti kép beállítás"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "szélesség"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "magasság"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "vágás"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "felméretezés"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+"Előnézeti kép beállítást vagy átméretezési paramétert kötelező kiválasztani."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Fókusz helye"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "A kép fő fókuszának a helye. Formátuma: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Érvénytelen fókusz formátum."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "A fókusz helye kívül esik a képen."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "A beírt érték: \"{subject_location}\"."
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Már létezik ilyen nevű mappa."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Fájlkezelő"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Médiatár"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "alapértelmezett alternatív szöveg"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "alapértelmezett képaláírás"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "fókusz helye"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "kép"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "képek"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "felhasználó"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "fájlok"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "vágólap"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "vágólapok"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "fájl"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "vágólap elem"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "vágólap elemek"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "mappa"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "fájlméret"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "fontos adatok kitöltve"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "eredeti fájlnév"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "név"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "leírás"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "tulajdonos"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "feltöltés ideje"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "módosítás ideje"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Jogosultságok kikapcsolva"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Jogosultságok ellenőrzésének kikapcsolása ennél a fájlnál. Ezt a fájlt bárki "
+"letöltheti."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "létrehozás ideje"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Mappa"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Mappák"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "minden elem"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "csak ez az elem"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "csak ez az elem, és az alá tartozók"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "engedélyez"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "letilt"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "típus"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "csoport"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "mindenki"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "olvashatja"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "szerkesztheti"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "hozzáadhat gyermekelemet"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "mappa jogosultság"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "mappa jogosultságok"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "fotózás dátuma"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "szerző"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "szerző nevének mindig meg kell jelennie"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "copyright információnak mindig meg kell jelennie"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "szélesség pixelben."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "magasság pixelben."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "előnézeti kép beállítások"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Kategorizálatlan feltöltések"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "fájlok hiányzó meta adatokkal"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "gyökér"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Kiválasztott akció végrehajtása"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Mehet"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Ide klikkelve több oldalról is választhatóak elemek"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Az összes (%(total_count)s) mappa és fájl kiválasztása"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Kiválasztás megszüntetése"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Vissza az adminisztrációs oldalra"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Nyitólap"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Vissza a fájlkezelőbe"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Vissza a gyökérmappába"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Vissza a(z) '%(folder_name)s' mappába"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplikátumok"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"A kiválasztott fájlok és mappák törlése csatlakozó elemek törlésével is "
+"járna, viszont a jelenlegi fiók nem rendelkezik a megfelelő jogosultságokkal "
+"a következő objektum típusok törléséhez:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"A kiválasztott fájlok és mappák törlése azzal járna, hogy a következő "
+"kapcsolt elemek is törlődnek:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Biztosan törli a kiválasztott fájlokat és/vagy mappákat? A következő "
+"objektumok, és a hozzájuk kapcsolt elemek is törlődni fognak:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Nem, mégsem"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Igen, biztos vagyok benne"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Történet"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Megtekintés az oldalon"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Vissza ide:"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "adminisztrációs felület"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Mappa Ikon"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+"Nincs jogosultsága az összes kiválasztott fájl és/vagy mappa másolásához."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Vissza"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Nincs alkalmas célmappa."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Nincsenek másolható fájlok és/vagy könyvtárak"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"A következő fájlok és/vagy mappák lesznek a célkönyvtárba másolva (megtartva "
+"a szerkezetüket):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Cél mappa:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Másol"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Nem lehet fájlokat a saját könyvtárukba másolni"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "Nincs jogosultsága az összes kiválasztott kép átméretezéséhez."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Nincsenek átméretezhető képek."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "A következő képek lesznek átméretezve:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Válasszon ki egy meglévő előnézeti kép beállítást, vagy írja be az "
+"átméretezési paramétereket:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Figyelem: a képek helyben lesznek átméretezve, felülírva az eredetieket. Ha "
+"meg szeretné őrizni az eredeti képeket, előbb másolja át őket."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Átméretezés"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Nincs jogosultsága az összes kiválasztott fájl és/vagy mappa mozgatásához."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Nincsenek mozgatható fájlok és/vagy mappák."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"A következő fájlok és/vagy mappák lesznek átmozgatva a cél mappába "
+"(megtartva a szerkezetüket):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Mozgatás"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Nem lehet fájlokat az eredeti mappájukba mozgatni"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "Nincs jogosultsága az összes kiválasztott fájl átnevezéséhez."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Nincsenek átnevezhető fájlok."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"A következő fájlok lesznek átnevezve (a mappában maradnak, és az eredeti "
+"fájlnév megmarad, csak a megjelenített név változik):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Átnevezés"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Vissza a szülőmappába"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Jelenlegi mappa beállításai"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Szerkeszt"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Kattintson ide a beírt szó kereséséhez"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Keresés"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Bezár"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Korlátozás"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Kattintsa be, hogy a keresést a jelenlegi mappára korlátozza"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Keresés korlátozása a jelenlegi mappára"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Törlés"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Új mappát hoz létre"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Új mappa"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Fájlok feltöltése"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Először válasszon mappát"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Név"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Tulajdonos"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Méret"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Akció"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "A(z) '%(item_label)s' mappa beállításai"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s mappa"
+msgstr[1] "%(counter)s mappa"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s fájl"
+msgstr[1] "%(counter)s fájl"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Mappa beállításainak szerkesztése"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Mappa eltávolítása"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Fájl kiválasztása"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "A(z) '%(item_label)s' szerkesztése"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Jogosultságok"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "letiltva"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "engedélyezve"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Kiválasztott fájlok vágólapra mozgatása"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "'%(item_label)s' letöltése"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Fájl eltávolítása"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+"Egérrel dobjon ide fájlokat, vagy használja a \"Fájlok feltöltése\" gombot"
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Egérre dobja ide a fájl, hogy feltöltse ebbe a mappába:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Feltöltés"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "mégsem"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Sikeres feltöltés!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Feltöltés megszakítva!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "előző"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr " %(number)s / %(num_pages)s oldal"
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "következő"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Összes (%(total_count)s) kiválasztása"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Új"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Kérjük javítsa az alábbi hibát."
+msgstr[1] "Kérjük javítsa az alábbi hibákat."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Mentés"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Vágólap"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Összes elem beillesztése ide"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Összes vágólap elem mozgatása ide: "
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Üres vágólap"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "A vágólap üres"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "sikertelen feltöltés"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Típus"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Fájlméret"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Módosítva"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Létrehozva"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "találat"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "és "
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "keresés megszakítása"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Törlés"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "vagy dobja ide az egérrel a fájlokat"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "nincs fájl kiválasztva"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Keresés"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Fájl kiválasztása"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/it/LC_MESSAGES/django.mo b/filer/locale/it/LC_MESSAGES/django.mo
index 28289619f..b15a9a632 100644
Binary files a/filer/locale/it/LC_MESSAGES/django.mo and b/filer/locale/it/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/it/LC_MESSAGES/django.po b/filer/locale/it/LC_MESSAGES/django.po
index 59d3aaed1..f5d95d4b7 100644
--- a/filer/locale/it/LC_MESSAGES/django.po
+++ b/filer/locale/it/LC_MESSAGES/django.po
@@ -3,32 +3,49 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Iacopo Spalletti , 2012.
-# , 2012.
+# Translators:
+# Translators:
+# yakky , 2012
+# yakky , 2013,2015-2018
+# yakky , 2012
+# yakky , 2012-2013,2015
msgid ""
msgstr ""
-"Project-Id-Version: django-filer\n"
+"Project-Id-Version: django Filer\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-07-13 19:10+0200\n"
-"PO-Revision-Date: 2012-09-03 20:11+0100\n"
-"Last-Translator: Stefan Foulis \n"
-"Language-Team: Italian (http://www.transifex.com/projects/p/django-filer/"
-"language/it/)\n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: yakky , 2013,2015-2018\n"
+"Language-Team: Italian (http://app.transifex.com/divio/django-filer/language/"
+"it/)\n"
+"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: it\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
+"1 : 2;\n"
-#: views.py:103
-msgid "Folder with this name already exists."
-msgstr "Esiste già una cartella con questo nome."
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
-#: admin/fileadmin.py:41
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
msgid "Advanced"
msgstr "Avanzato"
-#: admin/folderadmin.py:324 admin/folderadmin.py:427
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "URL standard"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
msgid ""
"Items must be selected in order to perform actions on them. No items have "
"been changed."
@@ -36,470 +53,588 @@ msgstr ""
"Gli elementi devono essere selezionati in modo da eseguire azioni su di "
"essi. Nessun elemento è stato modificato."
-#: admin/folderadmin.py:344
+#: admin/folderadmin.py:434
#, python-format
msgid "%(total_count)s selected"
msgid_plural "All %(total_count)s selected"
-msgstr[0] " %(total_count)s selezionati"
-msgstr[1] "Tutti %(total_count)s selezionato"
+msgstr[0] " %(total_count)s elemento selezionato"
+msgstr[1] "Tutti e %(total_count)s selezionati"
+msgstr[2] "Tutti e %(total_count)s selezionati"
-#: admin/folderadmin.py:377
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "%(folder_name)sLista file per "
+
+#: admin/folderadmin.py:475
#, python-format
msgid "0 of %(cnt)s selected"
msgstr "0 su %(cnt)s selezionati"
-#: admin/folderadmin.py:456
+#: admin/folderadmin.py:612
msgid "No action selected."
msgstr "Nessuna azione selezionata."
-#: admin/folderadmin.py:497
+#: admin/folderadmin.py:664
#, python-format
msgid "Successfully moved %(count)d files to clipboard."
msgstr "%(count)d file spostati con successo negli appunti."
-#: admin/folderadmin.py:503
+#: admin/folderadmin.py:669
msgid "Move selected files to clipboard"
msgstr "Sposta i file selezionati negli Appunti"
-#: admin/folderadmin.py:537
+#: admin/folderadmin.py:709
#, python-format
msgid "Successfully disabled permissions for %(count)d files."
msgstr "Permessi per %(count)d file disabilitati con successo."
-#: admin/folderadmin.py:541
+#: admin/folderadmin.py:711
#, python-format
msgid "Successfully enabled permissions for %(count)d files."
msgstr "Permessi per %(count)d file abilitati con successo."
-#: admin/folderadmin.py:550
+#: admin/folderadmin.py:719
msgid "Enable permissions for selected files"
msgstr "Attiva i permessi per i file selezionati"
-#: admin/folderadmin.py:555
+#: admin/folderadmin.py:725
msgid "Disable permissions for selected files"
msgstr "Disabilita i permessi per i file selezionati"
-#: admin/folderadmin.py:623
+#: admin/folderadmin.py:789
#, python-format
msgid "Successfully deleted %(count)d files and/or folders."
msgstr "%(count)d file e/o cartelle cancellati con successo."
-#: admin/folderadmin.py:630
+#: admin/folderadmin.py:794
msgid "Cannot delete files and/or folders"
msgstr "Non è possibile cancellare i file e/o le cartelle"
-#: admin/folderadmin.py:632
+#: admin/folderadmin.py:796
msgid "Are you sure?"
msgstr "Sei sicuro?"
-#: admin/folderadmin.py:637
+#: admin/folderadmin.py:802
msgid "Delete files and/or folders"
msgstr "Elimina i file e/o le cartelle"
-#: admin/folderadmin.py:656
+#: admin/folderadmin.py:823
msgid "Delete selected files and/or folders"
msgstr "Elimina i file e/o le cartelle selezionati"
-#: admin/folderadmin.py:771
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Esistono altre cartelle chiamate %s nella destinazione selezionata"
+
+#: admin/folderadmin.py:934
#, python-format
msgid ""
"Successfully moved %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
-"%(count)d file e/o le cartelle nella cartella '%(destination)s' spostati con "
-"successo."
+"%(count)d file e/o le cartelle spostati con successo nella cartella "
+"'%(destination)s'."
-#: admin/folderadmin.py:778 admin/folderadmin.py:780
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
msgid "Move files and/or folders"
-msgstr "Sposta file e/o le cartelle"
+msgstr "Sposta i file e/o le cartelle"
-#: admin/folderadmin.py:797
+#: admin/folderadmin.py:959
msgid "Move selected files and/or folders"
msgstr "Sposta i file e/o le cartelle selezionati"
-#: admin/folderadmin.py:854
+#: admin/folderadmin.py:1016
#, python-format
msgid "Successfully renamed %(count)d files."
msgstr "%(count)d file rinominati con successo."
-#: admin/folderadmin.py:862 admin/folderadmin.py:864 admin/folderadmin.py:881
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
msgid "Rename files"
msgstr "Rinomina file"
-#: admin/folderadmin.py:975
+#: admin/folderadmin.py:1137
#, python-format
msgid ""
"Successfully copied %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
-"%(count)d file e/o cartelle nella cartella '%(destination)s ' copiati con "
-"successo."
+"%(count)d file e/o cartelle copiati con successo nella cartella "
+"'%(destination)s '."
-#: admin/folderadmin.py:989 admin/folderadmin.py:991
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
msgid "Copy files and/or folders"
msgstr "Copia i file e/o le cartelle"
-#: admin/folderadmin.py:1010
+#: admin/folderadmin.py:1174
msgid "Copy selected files and/or folders"
msgstr "Copia i file e/o le cartelle selezionati"
-#: admin/folderadmin.py:1105
+#: admin/folderadmin.py:1279
#, python-format
msgid "Successfully resized %(count)d images."
msgstr "%(count)d immagini ridimensionate con successo."
-#: admin/folderadmin.py:1113 admin/folderadmin.py:1115
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
msgid "Resize images"
msgstr "Ridimensiona le immagini"
-#: admin/folderadmin.py:1133
+#: admin/folderadmin.py:1303
msgid "Resize selected images"
msgstr "Ridimensiona le immagini selezionate"
-#: admin/forms.py:26
+#: admin/forms.py:24
msgid "Suffix which will be appended to filenames of copied files."
msgstr "Suffisso che sarà aggiunto al nome dei file copiati."
-#: admin/forms.py:33
+#: admin/forms.py:31
#, python-format
msgid ""
"Suffix should be a valid, simple and lowercase filename part, like "
"\"%(valid)s\"."
msgstr ""
-"Il suffisso dovrebbe essere valido, semplice e minuscolo per quanto riguarda "
-"la parte del nome del file, come \"%(valid)s\"."
+"Il suffisso deve essere una sezione del nome del file valida, semplice e "
+"minuscola, come \"%(valid)s\"."
-#: admin/forms.py:54
+#: admin/forms.py:52
#, python-format
msgid "Unknown rename format value key \"%(key)s\"."
msgstr "Valore del formato di rinomina non valido \"%(key)s\"."
-#: admin/forms.py:56
+#: admin/forms.py:54
#, python-format
msgid "Invalid rename format: %(error)s."
msgstr "Formato di rinomina non valido: %(error)s."
-#: admin/forms.py:62
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
msgid "thumbnail option"
msgstr "opzione anteprima immagine"
-#: admin/forms.py:63
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
msgid "width"
msgstr "larghezza"
-#: admin/forms.py:64
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
msgid "height"
msgstr "altezza"
-#: admin/forms.py:65
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
msgid "crop"
msgstr "ritaglia"
-#: admin/forms.py:66
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
msgid "upscale"
msgstr "ingrandisci"
-#: admin/forms.py:71
+#: admin/forms.py:79
msgid "Thumbnail option or resize parameters must be choosen."
msgstr ""
-"L'opzione anteprima immagine o parametri di ridimensionamento devono essere "
-"selezionati."
-
-#: admin/forms.py:73
-msgid "Resize parameters must be choosen."
-msgstr "Devono essere scelte le opzioni di ridimensionamento."
+"Devi selezionare l'opzione anteprima immagine o i parametri di "
+"ridimensionamento."
-#: admin/imageadmin.py:12
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
msgid "Subject location"
msgstr "Posizione del soggetto"
-#: admin/imageadmin.py:13
-msgid "Location of the main subject of the scene."
-msgstr "Posizione del soggetto principale della scena."
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Posizione del soggetto principale della scena. Formato: \"x,y\""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Formato della posizione del soggetto non valida."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "La posizione del soggetto è esterna all'immagine."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Valore fornito: \"{subject_location}\""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Esiste già una cartella con questo nome."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Archivio file"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "testo predefinito per l'attributo alt "
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "didascalia predefinita"
-#: models/clipboardmodels.py:9 models/foldermodels.py:236
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "posizione del soggetto"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "immagine"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "immagini"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
msgid "user"
msgstr "utente"
-#: models/clipboardmodels.py:11 models/filemodels.py:287
+#: models/clipboardmodels.py:17 models/filemodels.py:157
msgid "files"
msgstr "file"
-#: models/clipboardmodels.py:34 models/clipboardmodels.py:40
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
msgid "clipboard"
-msgstr "Appunti"
+msgstr "appunti"
-#: models/clipboardmodels.py:35
+#: models/clipboardmodels.py:25
msgid "clipboards"
msgstr "appunti"
-#: models/clipboardmodels.py:39 models/filemodels.py:35
-#: models/filemodels.py:286
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
msgid "file"
msgstr "file"
-#: models/clipboardmodels.py:44
+#: models/clipboardmodels.py:56
msgid "clipboard item"
-msgstr "Elemento Appunti"
+msgstr "elemento degli appunti"
-#: models/clipboardmodels.py:45
+#: models/clipboardmodels.py:57
msgid "clipboard items"
-msgstr "Elementi Appunti"
+msgstr "elementi degli appunti"
-#: models/filemodels.py:33 templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
#: templates/admin/filer/folder/new_folder_form.html:4
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
msgid "folder"
msgstr "cartella"
-#: models/filemodels.py:36
+#: models/filemodels.py:81
msgid "file size"
msgstr "dimensione file"
-#: models/filemodels.py:38
+#: models/filemodels.py:87
msgid "sha1"
msgstr "sha1"
-#: models/filemodels.py:40
+#: models/filemodels.py:94
msgid "has all mandatory data"
msgstr "ha tutti i dati obbligatori"
-#: models/filemodels.py:42
+#: models/filemodels.py:100
msgid "original filename"
msgstr "nome del file originale"
-#: models/filemodels.py:44 models/foldermodels.py:99
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
msgid "name"
msgstr "nome"
-#: models/filemodels.py:46
+#: models/filemodels.py:116
msgid "description"
msgstr "descrizione"
-#: models/filemodels.py:50
+#: models/filemodels.py:125 models/foldermodels.py:108
msgid "owner"
msgstr "proprietario"
-#: models/filemodels.py:52 models/foldermodels.py:105
+#: models/filemodels.py:129 models/foldermodels.py:116
msgid "uploaded at"
-msgstr "caricato in "
+msgstr "caricato il"
-#: models/filemodels.py:53 models/foldermodels.py:108
+#: models/filemodels.py:134 models/foldermodels.py:126
msgid "modified at"
-msgstr "modificato in"
+msgstr "modificato il"
-#: models/filemodels.py:57
+#: models/filemodels.py:140
msgid "Permissions disabled"
msgstr "Permessi disabilitati"
-#: models/filemodels.py:58
-msgid "Disable any permission checking for this "
-msgstr "Disabilitare controllo permessi per questo"
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Disabilita ogni controllo dei permessi per questo file. Il file sarà "
+"accessibile da chiunque"
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
-#: models/foldermodels.py:107
+#: models/foldermodels.py:121
msgid "created at"
-msgstr "creato in"
+msgstr "creato il"
-#: models/foldermodels.py:211
-#: templates/admin/filer/widgets/admin_folder.html:3
-#: templates/admin/filer/widgets/admin_folder.html:5
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Folder"
msgstr "Cartella"
-#: models/foldermodels.py:212
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
msgid "Folders"
msgstr "Cartelle"
-#: models/foldermodels.py:227
+#: models/foldermodels.py:260
msgid "all items"
msgstr "tutti gli elementi"
-#: models/foldermodels.py:228
+#: models/foldermodels.py:261
msgid "this item only"
msgstr "solo questo elemento"
-#: models/foldermodels.py:229
+#: models/foldermodels.py:262
msgid "this item and all children"
-msgstr "questa elemento e tutti i figli"
+msgstr "questo elemento e tutti i figli"
-#: models/foldermodels.py:233
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "permetti"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "nega"
+
+#: models/foldermodels.py:280
msgid "type"
msgstr "tipo"
-#: models/foldermodels.py:239
+#: models/foldermodels.py:297
msgid "group"
msgstr "gruppo"
-#: models/foldermodels.py:240
+#: models/foldermodels.py:304
msgid "everybody"
msgstr "tutti"
-#: models/foldermodels.py:242
-msgid "can edit"
-msgstr "in grado modificare"
-
-#: models/foldermodels.py:243
+#: models/foldermodels.py:309
msgid "can read"
-msgstr "in grado di leggere"
+msgstr "può leggere"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "può modificare"
-#: models/foldermodels.py:244
+#: models/foldermodels.py:325
msgid "can add children"
-msgstr "in grado di aggiungere figli"
+msgstr "può aggiungere figli"
-#: models/foldermodels.py:273
+#: models/foldermodels.py:333
msgid "folder permission"
msgstr "permessi cartella"
-#: models/foldermodels.py:274
+#: models/foldermodels.py:334
msgid "folder permissions"
msgstr "permessi cartella"
-#: models/imagemodels.py:39
-msgid "date taken"
-msgstr "data presa"
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
-#: models/imagemodels.py:42
-msgid "default alt text"
-msgstr "testo predefinito per l'attributo alt "
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
-#: models/imagemodels.py:43
-msgid "default caption"
-msgstr "didascalia predefinita"
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
-#: models/imagemodels.py:45 templates/image_filer/image.html:6
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "data di creazione"
+
+#: models/imagemodels.py:25
msgid "author"
msgstr "autore"
-#: models/imagemodels.py:47
+#: models/imagemodels.py:32
msgid "must always publish author credit"
msgstr "pubblica sempre i crediti all'autore"
-#: models/imagemodels.py:48
+#: models/imagemodels.py:37
msgid "must always publish copyright"
msgstr "pubblica sempre il copyright"
-#: models/imagemodels.py:50
-msgid "subject location"
-msgstr "posizione del soggetto"
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "larghezza in pixel."
-#: models/imagemodels.py:200
-msgid "image"
-msgstr "immagine"
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "altezza in pixel."
-#: models/imagemodels.py:201
-msgid "images"
-msgstr "immagini"
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "opzione anteprima immagine"
-#: models/virtualitems.py:45
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "unfiled files"
-msgstr "file archiviati"
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "File non archiviati"
-#: models/virtualitems.py:59
+#: models/virtualitems.py:73
msgid "files with missing metadata"
msgstr "file con metadati mancanti"
-#: models/virtualitems.py:73 templates/admin/filer/breadcrumbs.html:6
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:10
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
msgid "root"
msgstr "cartella principale"
-#: templates/admin/filer/actions.html:4
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
msgid "Run the selected action"
msgstr "Esegui l'azione selezionata"
-#: templates/admin/filer/actions.html:4
+#: templates/admin/filer/actions.html:5
msgid "Go"
msgstr "Vai"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
msgid "Click here to select the objects across all pages"
msgstr "Clicca qui per selezionare gli oggetti in tutte le pagine"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
#, python-format
msgid "Select all %(total_count)s files and/or folders"
msgstr "Seleziona tutti i %(total_count)s file e/o cartelle"
-#: templates/admin/filer/actions.html:13
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
msgid "Clear selection"
msgstr "Cancella selezione"
#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
msgid "Go back to admin homepage"
msgstr "Torna alla pagina iniziale di admin"
#: templates/admin/filer/breadcrumbs.html:4
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
msgid "Home"
msgstr "Pagina iniziale"
#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
msgid "Go back to Filer app"
msgstr "Torna all'app Filer"
-#: templates/admin/filer/breadcrumbs.html:5
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/image_filer/image_export_form.html:8
-msgid "Filer"
-msgstr "Filer"
-
#: templates/admin/filer/breadcrumbs.html:6
-#: templates/image_filer/image_export_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Go back to root folder"
msgstr "Torna alla cartella principale"
#: templates/admin/filer/breadcrumbs.html:8
-#: templates/admin/filer/breadcrumbs.html:11
-#: templates/admin/filer/folder/change_form.html:11
-#: templates/image_filer/image_export_form.html:12
-#: templates/image_filer/image_export_form.html:14
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
#, python-format
msgid "Go back to '%(folder_name)s' folder"
msgstr "Torna alla cartella ' %(folder_name)s '"
-#: templates/admin/filer/change_form.html:28
-msgid "duplicates"
-msgstr "duplicati"
-
-#: templates/admin/filer/delete_confirmation.html:13
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"La cancellazione dell'elemento %(object_name)s '%(escaped_object)s' richiede "
-"la cancellazione di elementi collegati, ma il tuo account non ha i permessi "
-"per cancellare i seguenti tipi di oggetto:"
-
-#: templates/admin/filer/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the "
-"following protected related objects:"
-msgstr ""
-"La cancellazione dell'elemento %(object_name)s '%(escaped_object)s' richiede "
-"la cancellazione dei seguenti elementi protetti collegati:"
-
-#: templates/admin/filer/delete_confirmation.html:29
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Sei sicuro di voler cancellare l'elemento %(object_name)s "
-"\"%(escaped_object)s\"? \n"
-"Tutti gli elementi collegati seguenti saranno cancellati:"
-
-#: templates/admin/filer/delete_confirmation.html:34
-#: templates/admin/filer/delete_selected_files_confirmation.html:45
-msgid "Yes, I'm sure"
-msgstr "Sì, sono sicuro"
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplicati"
#: templates/admin/filer/delete_selected_files_confirmation.html:11
msgid ""
@@ -527,39 +662,52 @@ msgstr ""
"Sei sicuro di voler cancellare i file selezionati e/o le cartelle? Tutti gli "
"oggetti seguenti e quelli correlati verranno cancellati:"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:7
-#: templates/image_filer/image_export_form.html:8
-#: templates/image_filer/image_export_form.html:16
-msgid "Go back to"
-msgstr "Torna a"
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "No, torna indietro"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
-msgid "admin homepage"
-msgstr "Pagina iniziale admin"
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Sì, sono sicuro"
-#: templates/admin/filer/folder/change_form.html:22
-#: templates/admin/filer/image/change_form.html:9
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
msgid "History"
msgstr "Storia"
+#: templates/admin/filer/file/change_form.html:37
#: templates/admin/filer/folder/change_form.html:23
-#: templates/admin/filer/image/change_form.html:10
+#: templates/admin/filer/image/change_form.html:37
msgid "View on site"
msgstr "Vedi sul sito"
-#: templates/admin/filer/folder/change_form.html:35
-#: templates/admin/filer/folder/directory_listing.html:75
-#: templates/admin/filer/folder/directory_listing.html:85
-#: templates/admin/filer/folder/directory_table.html:23
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Torna a"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "Pagina iniziale admin"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
msgid "Folder Icon"
msgstr "Icona della cartella"
-#: templates/admin/filer/folder/choose_copy_destination.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:23
msgid ""
"Your account doesn't have permissions to copy all of the selected files and/"
"or folders."
@@ -567,16 +715,25 @@ msgstr ""
"Il tuo account non dispone delle autorizzazioni per copiare tutti i file e/o "
"cartelle selezionati."
-#: templates/admin/filer/folder/choose_copy_destination.html:15
-#: templates/admin/filer/folder/choose_move_destination.html:15
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Torna indietro"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
msgid "There are no destination folders available."
msgstr "Non ci sono cartelle di destinazione disponibili."
-#: templates/admin/filer/folder/choose_copy_destination.html:18
+#: templates/admin/filer/folder/choose_copy_destination.html:35
msgid "There are no files and/or folders available to copy."
msgstr "Non ci sono file e/o le cartelle disponibili per la copia."
-#: templates/admin/filer/folder/choose_copy_destination.html:20
+#: templates/admin/filer/folder/choose_copy_destination.html:40
msgid ""
"The following files and/or folders will be copied to a destination folder "
"(retaining their tree structure):"
@@ -584,41 +741,43 @@ msgstr ""
"I seguenti file e/o cartelle verranno copiati in una cartella di "
"destinazione (mantenendo la loro struttura ad albero):"
-#: templates/admin/filer/folder/choose_copy_destination.html:32
-#: templates/admin/filer/folder/choose_move_destination.html:32
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
msgid "Destination folder:"
msgstr "Cartella di destinazione:"
-#: templates/admin/filer/folder/choose_copy_destination.html:39
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
msgid "Copy"
msgstr "Copia"
-#: templates/admin/filer/folder/choose_images_resize_options.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Non è autorizzato a copiare file nella stessa cartella"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
msgid ""
"Your account doesn't have permissions to resize all of the selected images."
msgstr ""
"Il tuo account non dispone delle autorizzazioni per ridimensionare tutte le "
"immagini selezionate."
-#: templates/admin/filer/folder/choose_images_resize_options.html:15
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
msgid "There are no images available to resize."
msgstr "Non ci sono immagini disponibili da ridimensionare."
-#: templates/admin/filer/folder/choose_images_resize_options.html:17
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
msgid "The following images will be resized:"
msgstr "Le seguenti immagini verranno ridimensionate:"
-#: templates/admin/filer/folder/choose_images_resize_options.html:30
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
msgid "Choose an existing thumbnail option or enter resize parameters:"
msgstr ""
-"Scegli un'opzione esistente miniatura o immettere i parametri di "
+"Scegli un'opzione miniatura esistente o immetti i parametri di "
"ridimensionamento:"
-#: templates/admin/filer/folder/choose_images_resize_options.html:32
-msgid "Choose resize parameters:"
-msgstr "Scegli i parametri di ridimensionamento:"
-
-#: templates/admin/filer/folder/choose_images_resize_options.html:35
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
msgid ""
"Warning: Images will be resized in-place and originals will be lost. Maybe "
"first make a copy of them to retain the originals."
@@ -626,11 +785,11 @@ msgstr ""
"Attenzione: Le immagini verranno ridimensionate ora e le immagini originali "
"andranno perse. Forse è meglio fare una copia per mantenere i file originali."
-#: templates/admin/filer/folder/choose_images_resize_options.html:36
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
msgid "Resize"
msgstr "Ridimensiona"
-#: templates/admin/filer/folder/choose_move_destination.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:35
msgid ""
"Your account doesn't have permissions to move all of the selected files and/"
"or folders."
@@ -638,11 +797,11 @@ msgstr ""
"Il tuo account non dispone delle autorizzazioni per spostare tutti i file e/"
"o cartelle selezionati."
-#: templates/admin/filer/folder/choose_move_destination.html:18
+#: templates/admin/filer/folder/choose_move_destination.html:47
msgid "There are no files and/or folders available to move."
msgstr "Non ci sono file e/o cartelle a disponibili per lo spostamento."
-#: templates/admin/filer/folder/choose_move_destination.html:20
+#: templates/admin/filer/folder/choose_move_destination.html:52
msgid ""
"The following files and/or folders will be moved to a destination folder "
"(retaining their tree structure):"
@@ -650,22 +809,28 @@ msgstr ""
"I seguenti file e/o cartelle verranno spostati in una cartella di "
"destinazione (mantenendo la loro struttura ad albero):"
-#: templates/admin/filer/folder/choose_move_destination.html:38
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
msgid "Move"
msgstr "Sposta"
-#: templates/admin/filer/folder/choose_rename_format.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Non è autorizzato a spostare file nella stessa cartella"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
msgid ""
"Your account doesn't have permissions to rename all of the selected files."
msgstr ""
"Il tuo account non dispone delle autorizzazioni per rinominare tutti i file "
"selezionati."
-#: templates/admin/filer/folder/choose_rename_format.html:15
+#: templates/admin/filer/folder/choose_rename_format.html:18
msgid "There are no files available to rename."
-msgstr "Non ci sono file disponibili da ridimensionare."
+msgstr "Non ci sono file disponibili da rinominare."
-#: templates/admin/filer/folder/choose_rename_format.html:17
+#: templates/admin/filer/folder/choose_rename_format.html:20
msgid ""
"The following files will be renamed (they will stay in their folders and "
"keep original filename, only displayed filename will be changed):"
@@ -674,260 +839,436 @@ msgstr ""
"manterranno il nome del file originario, solo il nome visualizzato sarà "
"modificato):"
-#: templates/admin/filer/folder/choose_rename_format.html:54
+#: templates/admin/filer/folder/choose_rename_format.html:59
msgid "Rename"
msgstr "Rinomina"
-#: templates/admin/filer/folder/directory_listing.html:66
-msgid "Adds a new Folder"
-msgstr "Aggiungi una nuova cartella"
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Torna alla cartella superiore"
-#: templates/admin/filer/folder/directory_listing.html:66
-#: templates/image_filer/include/export_dialog.html:34
-msgid "New Folder"
-msgstr "Nuova cartella"
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Modifica i dettagli della cartella corrente"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "upload files"
-msgstr "carica file"
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Modifica"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "Upload"
-msgstr "Carica"
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Clicca qui per eseguire la ricerca della frase inserita"
-#: templates/admin/filer/folder/directory_listing.html:74
-msgid "Go back to the parent folder"
-msgstr "Torna alla cartella superiore"
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Cerca"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:18
-#, python-format
-msgid "1 folder"
-msgid_plural "%(counter)s folders"
-msgstr[0] "1 cartella"
-msgstr[1] "%(counter)s cartelle"
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Chiudi"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:19
-#, python-format
-msgid "1 file"
-msgid_plural "%(counter)s files"
-msgstr[0] "1 file"
-msgstr[1] "%(counter)s file"
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limita"
-#: templates/admin/filer/folder/directory_listing.html:80
-msgid "Change current folder details"
-msgstr "Modifica dettagli cartella corrente"
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Seleziona per limitare la ricerca alla cartella corrente"
-#: templates/admin/filer/folder/directory_listing.html:80
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:43
-msgid "Change"
-msgstr "Cambia"
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Limita la ricerca alla cartella corrente"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Cancella"
-#: templates/admin/filer/folder/directory_table.html:13
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Aggiungi una nuova cartella"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Nuova cartella"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Carica file"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "E' necessario selezionare prima una cartella"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
msgid "Name"
msgstr "Nome"
-#: templates/admin/filer/folder/directory_table.html:23
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:29
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Proprietario"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Dimensione"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Azione"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
#, python-format
msgid "Change '%(item_label)s' folder details"
-msgstr "Modifica dettagli cartella '%(item_label)s'"
+msgstr "Modifica i dettagli della cartella '%(item_label)s'"
-#: templates/admin/filer/folder/directory_table.html:30
-#: templates/admin/filer/folder/directory_table.html:45
-msgid "Owner"
-msgstr "Proprietario"
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s cartella"
+msgstr[1] "%(counter)s cartelle"
+msgstr[2] "%(counter)s cartelle"
-#: templates/admin/filer/folder/directory_table.html:37
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s file"
+msgstr[1] "%(counter)s file"
+msgstr[2] "%(counter)s file"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Modifica i dettagli della cartella"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Cancella cartella"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
msgid "Select this file"
msgstr "Seleziona questo file"
-#: templates/admin/filer/folder/directory_table.html:39
-#: templates/admin/filer/folder/directory_table.html:43
-#: templates/admin/filer/folder/directory_table.html:44
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
#, python-format
msgid "Change '%(item_label)s' details"
-msgstr "Cambia dettagli ' %(item_label)s ' "
+msgstr "Modifica i dettagli di ' %(item_label)s ' "
-#: templates/admin/filer/folder/directory_table.html:42
-#, python-format
-msgid "Delete '%(item_label)s'"
-msgstr "Cancella '%(item_label)s'"
-
-#: templates/admin/filer/folder/directory_table.html:42
-msgid "Delete"
-msgstr "Cancella"
-
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "Permissions"
msgstr "Permessi"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "disabled"
msgstr "disabilitato"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "enabled"
msgstr "abilitato"
-#: templates/admin/filer/folder/directory_table.html:50
-msgid "Move to clipboard"
-msgstr "Sposta negli Appunti"
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Sposta i file selezionati negli Appunti"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "URL canonico '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Download '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Cancella file"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Posiziona qui i file o usa il bottone \"Carica file\""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Posiziona il file da caricare in:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Carica"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "annulla"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Caricamento avvenuto!"
-#: templates/admin/filer/folder/directory_table.html:58
-msgid "there are no files or subfolders"
-msgstr "non ci sono file o sottocartelle"
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Caricamento annullato!"
-#: templates/admin/filer/folder/directory_table.html:65
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
msgid "previous"
msgstr "precedente"
-#: templates/admin/filer/folder/directory_table.html:69
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
#, python-format
-msgid ""
-"\n"
-" Page %(number)s of %(num_pages)s.\n"
-" "
-msgstr ""
-"\n"
-"Pagina %(number)s su %(num_pages)s ."
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Pagina %(number)s su %(num_pages)s."
-#: templates/admin/filer/folder/directory_table.html:75
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
msgid "next"
msgstr "prossima"
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Seleziona tutti %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
msgid "Add new"
-msgstr "Aggiungi nuova"
+msgstr "Aggiungi nuovo"
-#: templates/admin/filer/folder/new_folder_form.html:13
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Amministrazione Django"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
msgstr[0] "Correggi l'errore qui sotto."
msgstr[1] "Correggi gli errori qui sotto."
+msgstr[2] "Correggi gli errori qui sotto."
-#: templates/admin/filer/folder/new_folder_form.html:28
+#: templates/admin/filer/folder/new_folder_form.html:30
msgid "Save"
msgstr "Salva"
-#: templates/admin/filer/image/change_form.html:21
-msgid "Full size preview"
-msgstr "Anteprima a tutto schermo"
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:8
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Search"
-msgstr "Cerca"
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:13
-msgid "Enter your search phrase here"
-msgstr "Inserisci la tua frase di ricerca qui"
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Appunti"
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Click here to"
-msgstr "Clicca qui per"
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Incolla qui tutti gli elementi"
-#: templates/admin/filer/tools/search_form.html:14
-msgid "run search for entered phrase"
-msgstr "esegui la ricerca per frase inserita"
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Sposta tutti i file negli Appunti in"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Svuota appunti"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "gli appunti sono vuoti"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "caricamento fallito"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:15
-msgid "Check it to"
-msgstr "Seleziona per"
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Tipo"
-#: templates/admin/filer/tools/search_form.html:15
-#: templates/admin/filer/tools/search_form.html:16
-msgid "limit the search to current folder"
-msgstr "limitare la ricerca alla cartella corrente"
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Dimensione file"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Modificato"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Creato"
+
+#: templates/admin/filer/tools/search_form.html:5
msgid "found"
msgstr "trovato"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/search_form.html:5
msgid "and"
msgstr "e"
-#: templates/admin/filer/tools/search_form.html:19
+#: templates/admin/filer/tools/search_form.html:7
msgid "cancel search"
msgstr "annulla ricerca"
-#: templates/admin/filer/tools/upload_button_js.html:24
-#: templates/admin/filer/widgets/admin_file.html:7
-#: templates/admin/filer/widgets/admin_file.html:8
-msgid "file missing"
-msgstr "file mancante"
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Cancella"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "o posiziona il file qui"
-#: templates/admin/filer/tools/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr "Appunti"
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "nessun file selezionato"
-#: templates/admin/filer/tools/clipboard/clipboard.html:19
-msgid "Paste all items here"
-msgstr "Incolla qui tutti gli elementi"
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Consultazione"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "discard"
-msgstr "annulla"
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Seleziona file"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "Move all clipboard files to"
-msgstr "Sposta tutti i file negli Appunti in"
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
-#: templates/admin/filer/tools/clipboard/clipboard.html:43
-msgid "the clipboard is empty"
-msgstr "gli Appunti sono vuoti"
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
-#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:11
-msgid "upload failed"
-msgstr "caricamento fallito"
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:11
-msgid "no file selected"
-msgstr "nessun file selezionato"
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:14
-#: templates/admin/filer/widgets/admin_file.html:15
-#: templates/admin/filer/widgets/admin_folder.html:7
-#: templates/admin/filer/widgets/admin_folder.html:8
-msgid "Lookup"
-msgstr "Consultazione"
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:17
-#: templates/admin/filer/widgets/admin_folder.html:10
-msgid "Clear"
-msgstr "Cancella"
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
-#: templates/admin/filer/widgets/admin_folder.html:5
-msgid "none selected"
-msgstr "nessun elemento selezionato"
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
-#: templates/image_filer/folder.html:3
-#, python-format
-msgid "Folder '%(folder_label)s' files"
-msgstr "File cartella ' %(folder_label)s '"
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
-#: templates/image_filer/folder.html:6
-msgid "File name"
-msgstr "Nome file"
+#~ msgid "none selected"
+#~ msgstr "none selected"
-#: templates/image_filer/image_export_form.html:17
-msgid "export"
-msgstr "esporta"
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
-#: templates/image_filer/image_export_form.html:27
-msgid "download image"
-msgstr "scarica immagine"
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
-#: templates/image_filer/include/export_dialog.html:13
-msgid "Folder name already taken."
-msgstr "Nome cartella già utilizzato."
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
-#: templates/image_filer/include/export_dialog.html:15
-msgid "Submit"
-msgstr "Invia"
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/ja/LC_MESSAGES/django.mo b/filer/locale/ja/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..f18d8161c
Binary files /dev/null and b/filer/locale/ja/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/ja/LC_MESSAGES/django.po b/filer/locale/ja/LC_MESSAGES/django.po
new file mode 100644
index 000000000..bb438c591
--- /dev/null
+++ b/filer/locale/ja/LC_MESSAGES/django.po
@@ -0,0 +1,1219 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Japanese (http://app.transifex.com/divio/django-filer/"
+"language/ja/)\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/ja_JP/LC_MESSAGES/django.mo b/filer/locale/ja_JP/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..c1581e2b2
Binary files /dev/null and b/filer/locale/ja_JP/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/ja_JP/LC_MESSAGES/django.po b/filer/locale/ja_JP/LC_MESSAGES/django.po
new file mode 100644
index 000000000..72b1160c9
--- /dev/null
+++ b/filer/locale/ja_JP/LC_MESSAGES/django.po
@@ -0,0 +1,1219 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Japanese (Japan) (http://app.transifex.com/divio/django-filer/"
+"language/ja_JP/)\n"
+"Language: ja_JP\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/lt/LC_MESSAGES/django.mo b/filer/locale/lt/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..de0708e70
Binary files /dev/null and b/filer/locale/lt/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/lt/LC_MESSAGES/django.po b/filer/locale/lt/LC_MESSAGES/django.po
new file mode 100644
index 000000000..fdd11fd6a
--- /dev/null
+++ b/filer/locale/lt/LC_MESSAGES/django.po
@@ -0,0 +1,1273 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Matas Dailyda , 2015-2018
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Matas Dailyda , 2015-2018\n"
+"Language-Team: Lithuanian (http://app.transifex.com/divio/django-filer/"
+"language/lt/)\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
+"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? "
+"1 : n % 1 != 0 ? 2: 3);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Išplėstinės funkcijos"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "kanoninis URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Objektai turi būti pasirinkti, kad su jais būtų galima atlikti veiksmus. "
+"Jokie objektai nebuvo pakeisti."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "pasirinkta %(total_count)s"
+msgstr[1] "pasirinkta %(total_count)s"
+msgstr[2] "pasirinkta %(total_count)s"
+msgstr[3] "pasirinkta %(total_count)s"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "%(folder_name)svidinių aplankų sąrašas "
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 iš %(cnt)s pasirinkta"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Nepasirinktas joks veiksmas."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "Sėkmingai perkelta %(count)d failai į iškarpinę."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Perkelti pažymėtus failus į iškarpinę"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Sėkmingai išjungti leidimai %(count)d failams."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Sėkmingai įjungti leidimai %(count)d failams."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Įjungti leidimus pasirinktiems failams"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Išjungti leidimus pasirinktiems failams"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "Sėkmingai pašalino %(count)d failus ir / ar aplankus."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Negalima pašalinti failų ir / ar aplankų"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Ar jūs esate tikri?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Pašalinti failus ir / ar aplankus"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Pašalinti pasirinktus failus ir / ar aplankus"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+"Aplankai su %s pavadinimais jau egzistuoja pasirinktoje paskirties vietoje."
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Sėkmingai perkelti %(count)d failai ir / ar aplankai į aplanką "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Perkelti failus ir / ar aplankus"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Perkelti pasirinktus failus ir / ar aplankus"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "Sėkmingai pervardinti %(count)d failai."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Pervardinti failus"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Sėkmingai nukopijuoti %(count)d failai ir / ar aplankai į aplanką "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Kopijuoti failus ir / ar aplankus"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Kopijuoti pasirinktus failus ir / ar aplankus"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Sėkmingai pakeistas %(count)d paveikslėlių dydis."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Pakeisti paveikslėlių dydžius"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Pakeisti pasirinktų paveikslėlių dydžius"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Priesaga kuri bus pridėta prie nukopijuotų failų pavadinimų."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Priesaga turi būti paprasta ir taisyklinga bylos pavadinimo dalis pvz. "
+"\"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Nežinomas pervardinimo formato reikšmės raktažodis \"%(key)s\"."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Negalimas pervardinimo formatas: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "miniatiūros nustatymas"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "plotis"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "aukštis"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "apkirpti"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "išdidinti"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+"Miniatiūros nustatymas arba dydžio keitimo parametrai turi būti pasirinkti."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Subjekto vieta"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Pagrindinio subjekto vieta vaizde. Fomatas: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Netinkamas subjekto vietos formatas."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Subjekto vieta yra už paveikslėlio."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Jūsų įvestis: \"{subject_location}\". "
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Aplankas su tokiu pavadinimu jau egzistuoja."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer'is"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Medijos biblioteka"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "numatytasis alternatyvus tekstas"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "numatytoji antraštė"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "subjekto vieta"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "paveikslėlis"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "paveikslėliai"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "vartotojas"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "failai"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "iškarpinė"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "iškarpinės"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "failas"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "iškarpinės objektas"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "iškarpinės objektai"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "aplankas"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "failo dydis"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "turi visus privalomus duomenis"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "originalus failo pavadinimas"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "pavadinimas"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "apibūdinimas"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "savininkas"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "įkelta"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "pakeista"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Leidimai išjungti"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Įšjungti bet kokius leidimų tikrinimus šiai bylai. Byla bus viešai "
+"pasiekiama bet kam."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "sukurta"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Aplankas"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Aplankai"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "visi objektai"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "tik šį objektą"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "šį objektą ir visus vidinius"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "leisti"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "neleisti"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "tipas"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "grupė"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "visi"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "gali skaityti"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "gali redaguoti"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "gali pridėti vidinius"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "aplanko leidimas"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "aplanko leidimai"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "paimta data"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autorius"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "visada turi publikuoti autorystę"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "visada turi publikuoti autorių teises"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "plotis pikseliais."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "aukštis pikseliais."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "miniatiūros nustatymai"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Nerūšiuotos įkeltos bylos"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "failai su trūkstamais meta duomenimis"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "pradinis"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Vykdyti pasirinktą veiksmą"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Eiti"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Spauskite čia kad pasirinktumete objektus per visus puslapius"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Pasirinkti visus %(total_count)s failus ir / ar aplankus"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Išvalyti pasirinkimus"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Grįžti į pradinį administravimo puslapį"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Pradinis"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Grįžti į Failer'io apklikaciją"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Grįžti į pradinį aplanką"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Grįžti į '%(folder_name)s' aplanką"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Dublikatai"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Pasirintų failų ir / ar aplankų šalinimas pašalintų susijusius objektus, "
+"tačiau jūsų vartotojas neturi leidimo šalinti šių objektų tipų:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Pasirinktų failų ir / ar aplankų šalinimas reikalautų pašalinti šiuos "
+"apsaugotus susijusius objektus:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Ar tikrai norite pašalinti pasirinktus failus ir / ar aplankus? Visi susiję "
+"objektai bus pašalinti:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Ne, grįžti atgal"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Taip, esu tikras"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Istorija"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Žiūrėti puslapyje"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Grįžti į"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "administravimo pradinis puslapis"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Aplanko piktograma"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+"Jūsų vartotojas neturi leidimų kopijuoti visus pasirinktus failus ir / ar "
+"aplankus."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Grįžti atgal"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Nėra jokių paskyrimo aplankų."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Nėra jokiu failų ir / ar aplankų kopijavimui."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Šie failai ir / ar aplankai bus nukopijuoti į paskirtą aplanką (išlaikant jų "
+"medžio struktūrą):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Paskyrimo aplankas:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopijuoti"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Neleidžiama kopijuoti bylų į tą patį aplanką"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+"Jūsų vartotojas neturi leidimų keisti dydžius visiems pasirinktiems "
+"paveikslėliams."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Nėra jokiu paveikslėlių dydžio keitimui."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Šių paveikslėlių dydis bus pakeistas:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Pasirinkite esamą miniatiūros nustatymą, arba įveskite dydžio keitimo "
+"parametrus:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Įspėjimas: Paveikslėlių dydžiai bus pakeisti vietoje, ir originalas bus "
+"pašalintas. Patartina atsikopijuoti paveikslėlį, kad nedingtų originalas."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Pakeisti dydį"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Jūsų vartotojas neturi leidimų perkelti visus pasirinktus failus ir / ar "
+"aplankus."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Nėra jokiu failų ir / ar aplankų perkelimui."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Šie failai ir / ar aplankai bus perkelti į paskirtą aplanką (išlaikant jų "
+"medžio struktūrą):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Perkelti"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Neleidžiama perkelti bylų į tą patį aplanką"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "Jūsų vartotojas neturi leidimų pervardinti visus pasirinktus failus."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Nėra jokių failų pervardinimui."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"Šie failai bus pervardinti (jie liks savo aplankuose ir pasiliks savo "
+"originalius pavadinimus, pasikeis tik atvaizduojamas failo pavadinimas):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Pervardinti"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Grįžti į pirminį aplanką"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Keisti dabartinio aplanko detales"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Keisti"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Spausti čia kad būtų paleista paieška visai frazei"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Ieškoti"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Uždaryti"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limitas"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Pažymėti, kad paieška būtų apribota tik dabartiniame aplanke"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Apriboti paieška tik dabartiniame aplanke"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Pašalinti"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Sukuria naują aplanką"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Naujas aplankas"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "įkelti bylas"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Pirma turite pasirinkti aplanką"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Pavadinimas"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Savininkas"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Dydis"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Veiksmas"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Keisti '%(item_label)s' aplanko detales"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s aplankas"
+msgstr[1] "%(counter)s aplankai"
+msgstr[2] "%(counter)s aplankų"
+msgstr[3] "%(counter)s aplankų"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s byla"
+msgstr[1] "%(counter)s bylos"
+msgstr[2] "%(counter)s bylų"
+msgstr[3] "%(counter)s bylų"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Keisti aplanko detales"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Pašalinti aplanką"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Pasirinkti šį failą"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Keisti '%(item_label)s' detales"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Leidimai"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "išjungta"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "įjungta"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Perkelti pažymėtus failus į iškarpinę"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "Kanoninis url '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Parsisiųsti '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Pašalinti bylą"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Meskite bylas čia arba naudokit \"Įkelti bylas\" mygtuką"
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Meskite bylą kad įkelti į:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Įkelti"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "atšaukti"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Įkelimas pavyko!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Įkelimas atšauktas!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "buvęs"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Puslapis %(number)s iš %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "kitas"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Pasirinkti visus %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Pridėti naują"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Django tinklalapio administravimas"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Ištaisykite žemiau esančias klaidas."
+msgstr[1] "Ištaisykite žemiau esančias klaidas."
+msgstr[2] "Ištaisykite žemiau esančias klaidas."
+msgstr[3] "Ištaisykite žemiau esančias klaidas."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Išsaugoti"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Iškarpinė"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Įkopijuoti visus objektus čia"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Perkelti visus iškarpinėje esančius failus į"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Išvalyti iškarpinę"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "iškarpinė tuščia"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "įkelimas nepavyko"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Tipas"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Failo dydis"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Pakeistas"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Sukurtas"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "rasta"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "ir"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "atšaukti paiešką"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Išvalyti"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "arba meskite bylą čia"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "joks failas nepasirinktas"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Informacijos ieškojimas"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Pasirinkti bylą"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+#~ msgstr[3] "15c0f2d28d6dab1af1f6d94906beb627_pl_3"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/lt_LT/LC_MESSAGES/django.mo b/filer/locale/lt_LT/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..5e380751c
Binary files /dev/null and b/filer/locale/lt_LT/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/lt_LT/LC_MESSAGES/django.po b/filer/locale/lt_LT/LC_MESSAGES/django.po
new file mode 100644
index 000000000..a7dcb78dc
--- /dev/null
+++ b/filer/locale/lt_LT/LC_MESSAGES/django.po
@@ -0,0 +1,1236 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Lithuanian (Lithuania) (http://app.transifex.com/divio/django-"
+"filer/language/lt_LT/)\n"
+"Language: lt_LT\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
+"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? "
+"1 : n % 1 != 0 ? 2: 3);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+#~ msgstr[3] "15c0f2d28d6dab1af1f6d94906beb627_pl_3"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/nb/LC_MESSAGES/django.mo b/filer/locale/nb/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..cc24295a7
Binary files /dev/null and b/filer/locale/nb/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/nb/LC_MESSAGES/django.po b/filer/locale/nb/LC_MESSAGES/django.po
new file mode 100644
index 000000000..05d3f22b3
--- /dev/null
+++ b/filer/locale/nb/LC_MESSAGES/django.po
@@ -0,0 +1,1256 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Eirik Krogstad , 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Eirik Krogstad , 2013\n"
+"Language-Team: Norwegian Bokmål (http://app.transifex.com/divio/django-filer/"
+"language/nb/)\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Avansert"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Du må velge noen elementer for å utføre handlinger på dem. Ingen elementer "
+"er endret."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s valgt"
+msgstr[1] "Alle %(total_count)s valgt"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 av %(cnt)s valgt"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Ingen handling valgt."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "Flyttet %(count)d filer til utklippstavlen."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Flytt valgte filer til utklippstavlen"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Fjernet tillatelser for %(count)d filer."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Satte tillatelser for %(count)d filer."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Sett tillatelser for valgte filer"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Fjern tillatelser for valgte filer"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "Slettet %(count)d filer og/eller mapper."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Kan ikke slette filer og/eller mapper"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Er du sikker?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Slett filer og/eller mapper"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Slett valgte filer og/eller mapper"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Flyttet %(count)d filer og/eller mapper til mappen \"%(destination)s\"."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Flytt filer og/eller mapper"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Flytt valgte filer og/eller mapper"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "Endret navn på %(count)d filer."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Endre navn på filer"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Kopierte %(count)d filer og/eller mapper til mappen \"%(destination)s\"."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Kopier filer og/eller mapper"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Kopier valgte filer og/eller mapper"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Endret størrelse på %(count)d bilder."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Endre størrelse på bilder"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Endre størrelse på valgte bilder"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Endelse som vil tilføyes filnavn på kopierte filer."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Endelse bør være en gyldig, enkel del av filnavnet med små bokstaver, som "
+"\"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Ugyldig nøkkel \"%(key)s\" for endring av navn."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Ugyldig format for endring av navn: %(error)s"
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "miniatyrbildevalg"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "bredde"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "høyde"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "beskjæring"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "oppskalering"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Miniatyrbildevalg eller parametre for endring av størrelse må velges."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Fokuseringsområde"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "En mappe med dette navnet eksisterer allerede."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "standard alternativtekst"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "standard undertekst"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "fokuseringsområde"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "bilde"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "bilder"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "bruker"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "filer"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "utklippstavle"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "utklippstavler"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "fil"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "element på utklippstavle"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "elementer på utklippstavle"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "mappe"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "filstørrelse"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "har alle påkrevde data"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "originalt filnavn"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "navn"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "beskrivelse"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "eier"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "lastet opp"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "endret"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Tillatelser er deaktivert"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "opprettet"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Mappe"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Mapper"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "alle elementer"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "kun dette elementet"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "dette elementet og alle underliggende nivå"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "type"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "gruppe"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "alle"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "kan lese"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "kan redigere"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "kan legge til undernivåer"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "tillatelse for mappe"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "tillatelser for mappe"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "dato bildet ble tatt"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "opphavsperson"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "må alltid publisere opphavsperson"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "må alltid publisere opphavsrett"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "filer med manglende metadata"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "rot"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Utfør den valgte handlingen"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Utfør"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Klikk her for å velge objekter på tvers av alle sider"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Velg alle %(total_count)s filer og/eller mapper"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Tøm utvalg"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Gå tilbake til administrasjonssiden"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Hjem"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Gå tilbake til Filer"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Gå tilbake til rotmappen"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Gå tilbake til mappen \"%(folder_name)s\""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Å slette de valgte filene og/eller mappene ville resultere i sletting av "
+"relaterte objekter, men din konto har ikke tillatelse til å slette objekter "
+"av følgende typer:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Å slette de valgte filene og/eller mappene ville kreve å slette følgende "
+"beskyttede relaterte objekter:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Er du sikker på at du vil slette de valgte filene og/eller mappene? Alle de "
+"følgende objektene og deres relaterte elementer vil bli slettet:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Historie"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Se på nettstedet"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Gå tilbake til"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "administrasjonssiden"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Mappeikon"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+"Din konto har ikke tillatelse til å kopiere alle de valgte filene og/eller "
+"mappene."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Det er ingen målmapper tilgjengelig."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Det er ingen filer og/eller mapper å kopiere."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"De følgende filene og/eller mappene vil bli kopiert til en målmappe "
+"(mappestruktur vil beholdes):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Målmappe:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopier"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+"Din konto har ikke tillatelse til å endre størrelse på alle valgte bilder."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Det er ingen bilder å endre størrelse på."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "De følgende bildene vil få endret størrelse:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Velg et eksisterende miniatyrbildevalg eller skriv inn parametre for endring "
+"av størrelse:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Advarsel: Bilder vil få sin størrelse endret, og originalene vil gå tapt. "
+"Det kan være ønskelig å først gjøre en kopi for å beholde originalene."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Endre størrelse"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Din konto har ikke tillatelse til å flytte alle de valgte filene og/eller "
+"mappene."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Det er ingen filer og/eller mapper å flytte."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"De følgende filene og/eller mappene vil bli flyttet til en målmappe "
+"(mappestruktur vil beholdes):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Flytt"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+"Din konto har ikke tillatelse til å endre navn på alle de valgte filene."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Det er ingen filer å endre navn på."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"De følgende filene vil få endret navn (de vil forbli på samme sted og "
+"beholde originalt filnavn, bare visningsnavn vil endres):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Endre navn"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Gå tilbake til overordnet nivå"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Endre detaljer for gjeldende mappe"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Endre"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Søk"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Slett"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Legger til en ny mappe"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Ny mappe"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Navn"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Eier"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Endre detaljer for mappen \"%(item_label)s\""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Velg denne filen"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Endre detaljer for \"%(item_label)s\""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Tillatelser"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "deaktivert"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "aktivert"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Flytt valgte filer til utklippstavlen"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Last opp"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "forrige"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "neste"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Legg til ny"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Vennligst rett feilen under"
+msgstr[1] "Vennligst rett feilene under."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Lagre"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Utklippstavle"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Lim inn alle elementer her"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Flytt alle filer på utklippstavlen til"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "utklippstavlen er tom"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "feil ved opplasting"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "funnet"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "og"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "avbryt søk"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Tøm"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "ingen fil valgt"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Slå opp"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/nl_NL/LC_MESSAGES/django.mo b/filer/locale/nl_NL/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..c9e62df2f
Binary files /dev/null and b/filer/locale/nl_NL/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/nl_NL/LC_MESSAGES/django.po b/filer/locale/nl_NL/LC_MESSAGES/django.po
new file mode 100644
index 000000000..0cbda5a3f
--- /dev/null
+++ b/filer/locale/nl_NL/LC_MESSAGES/django.po
@@ -0,0 +1,1245 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Alexander Schoemaker , 2012
+# Alexander Schoemaker , 2012
+# Edwin Janssen, 2023
+# Evelijn Saaltink , 2017
+# Jeroen, 2018
+# Maikel Wever, 2013
+# Maikel Wever, 2013
+# Stefan van den Eertwegh , 2023
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Stefan van den Eertwegh , 2023\n"
+"Language-Team: Dutch (Netherlands) (http://app.transifex.com/divio/django-filer/language/nl_NL/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl_NL\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+#| msgid ""
+#| "ccount doesn't have permissions to rename all of the selected files."
+msgid "You do not have permission to upload files."
+msgstr "Je hebt geen rechten om bestanden te uploaden."
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr "Kan map niet vinden om te uploaden. Herlaad de pagina en probeer het opnieuw."
+
+#: admin/clipboardadmin.py:20
+msgid ""
+"Can't use this folder, Permission Denied. Please select another folder."
+msgstr "Kan deze map niet gebruiken, rechten geweigerd. Kies een andere map."
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Geavanceerd"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "canonieke URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr "De actie kan niet worden uitgevoerd omdat er zijn geen items geselecteerd."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s geselecteerd"
+msgstr[1] "Alle %(total_count)s geselecteerd"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Inhoud van map %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 van %(cnt)s geselecteerd"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Geen actie geselecteerd."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "%(count)d bestanden zijn succesvol verplaatst naar het klembord."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Verplaats geselecteerde bestanden naar het klembord"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Toegangsrechten succesvol uitgeschakeld voor %(count)d bestanden."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Toegangsrechten succesvol ingeschakeld voor %(count)d bestanden."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Schakel toegangsrechten in voor geselecteerde bestanden"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Schakel toegangsrechten uit voor geselecteerde bestanden"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "%(count)d bestanden en/of mappen zijn succesvol verwijderd."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Bestanden en/of mappen kunnen niet worden verwijderd"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Weet je het zeker?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Verwijder bestanden en/of mappen"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Verwijder geselecteerde bestanden en/of mappen"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Er bestaan al mappen met de namen %s op de geselecteerde bestemming"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "%(count)d bestanden en of mappen zijn succesvol verplaatst naar map '%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Verplaats bestanden en/of mappen"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Verplaats geselecteerde bestanden en/of mappen"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "%(count)d bestanden zijn succesvol hernoemd."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Hernoem bestanden"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "%(count)d bestanden en/of mappen zijn succesvol gekopieerd naar map '%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Kopieer bestanden en/of mappen"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Kopieer geselecteerde bestanden en/of mappen"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Afmetingen van %(count)d afbeeldingen zijn succesvol aangepast."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Afmetingen aanpassen"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Afmetingen aanpassen van geselecteerde afbeeldingen"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Achtervoegsel wordt toegevoegd aan bestandsnaam van gekopieerde bestanden"
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr "Achtervoegsel moet een geldige waarde zijn in kleine letters, bv. \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Type \"%(key)s\" voor het hernoemen van bestandsnamen is ongeldig."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Ongeldige waarde voor het hernoemen van bestandsnamen: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "thumbnail optie"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "breedte"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "hoogte"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "uitsnijden"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "opschalen"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Thumbnail optie of afmetingsopties moet zijn geselecteerd"
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Locatie van onderwerp"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Locatie van het hoofdonderwerp van de scène. Formaat: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Ongeldig locatieformaat van het onderwerp"
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Locatie van het onderwerp bevindt zich buiten de afbeelding."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Je invoer: \"{subject_location}\"."
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr "Wie"
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr "Wat"
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Er bestaat al een map met deze naam."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Bestandsbeheer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Mediabibliotheek"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "standaard alt. tekst"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "standaard titel"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "locatie van onderwerp"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "afbeelding"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "afbeeldingen"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr "Afbeelding formaat niet herkend of afbeelding grootte overtreft limiet van %(max_pixels)d miljoen pixels bij een factor twee of meer. Voor opnieuw uploaden, check bestandsformaat of wijzig grootte afbeelding van %(width)d x %(height)d resolutie of lager."
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr "Afbeelding grootte (%(pixels)d miljoen pixels) overtreft limiet van %(max_pixels)d miljoen pixels. Voor het opnieuw uploaden, afbeelding grootte van %(width)d x %(height)d resolutie of lager."
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "gebruiker"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "bestanden"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "klembord"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "klemborden"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "bestand"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "klembord item"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "klembord items"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "map"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "bestandsgrootte"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "heeft allen verplichte eigenschappen"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "oorspronkelijke bestandsnaam"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "naam"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "omschrijving"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "eigenaar"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "geüpload op"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "gewijzigd op"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Toegangsrechten uitgeschakeld"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr "Schakel controle op toegangsrechten uit voor dit bestand. Het bestand zal publiek toegankelijk zijn voor iedereen"
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr "ouder"
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "aangemaakt op"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Map"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Mappen"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "alle items"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "alleen dit item"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "dit item en alle onderliggende items"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr "overerven"
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "toestaan"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "afwijzen"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "type"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "groep"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "iedereen"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "mag lezen"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "mag wijzigen"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "mag onderliggende items toevoegen"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "toegangsrecht folder"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "toegangsrechten folder"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr "Map kan niet geselecteerd worden met type \"alle items\"."
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr "Map moet geselecteerd worden wanneer type niet \"alle items\" is."
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr "Gebruiker of groep kan niet geselecteerd worden samen met \"iedereen\"."
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr "Ten minste één gebruiker, groep of \"iedereen\" moet worden geselecteerd."
+
+#: models/foldermodels.py:360
+#| msgid "Folders"
+msgid "All Folders"
+msgstr "Alle Mappen"
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr "Logisch Pad"
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr "Gebruiker:{user}"
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr "Groep: {group}"
+
+#: models/foldermodels.py:375
+#| msgid "everybody"
+msgid "Everybody"
+msgstr "Iedereen"
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr "Bewerken"
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr "Lezen"
+
+#: models/foldermodels.py:390
+#| msgid "can add children"
+msgid "Add children"
+msgstr "Toevoegen kinderen"
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "datum"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "auteur"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "naam auteur altijd publiceren"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "auteursrechten altijd publiceren"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "breedte in pixel."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "hoogte in pixel."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "thumbnail-opties"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Ongesorteerde uploads"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "bestanden met ontbrekende meta gegevens"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "hoofdmap"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr "Toon tabel weergave"
+
+#: settings.py:278
+#| msgid "thumbnail option"
+msgid "Show thumbnail view"
+msgstr "Toon thumbnail weergave"
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Geselecteerde actie uitvoeren"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Uitvoeren"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Klik hier om objecten over alle pagina's te selecteren"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Selecteer alle %(total_count)s bestanden en/of mappen"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Selectie wissen"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Ga terug naar admin homepage"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Home"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Ga terug naar Bestandsbeheer"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Ga terug naar de hoofdmap"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Ga terug naar map '%(folder_name)s'"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplicaten"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr "Het verwijderen van de geselecteerde bestanden en/of mappen resulteert in het verwijderen van gerelateerde objecten. Je hebt echter geen toegangsrechten voor het verwijderen van de volgende objecttypes:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr "Het verwijderen van de geselecteerde bestanden en/of mappen leidt tot het verwijderen van de volgende beschermde gerelateerde objecten:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr "Weet je zeker dat je de geselecteerde bestanden en/of folders wilt verwijderen? Alle volgende objecten en gerelateerde items zullen worden verwijderd: "
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Nee, ga terug"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Ja, ik weet het zeker"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Geschiedenis"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Bekijk op site"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Ga terug naar"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "admin homepage"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Map icoon"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files "
+"and/or folders."
+msgstr "Je account heeft geen toegangsrechten voor het kopiëren van de geselecteerde bestanden en/of mappen"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Neem me mee terug"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Er zijn geen bestemmingsmappen beschikbaar."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Er zijn geen bestanden en/of mappen beschikbaar om te kopiëren."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr "De volgende bestanden en/of mappen zullen worden gekopieerd naar een bestemmingsmap (structuur blijft behouden):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Bestemmingsmap:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopiëren"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Het is niet toegestaan om bestanden naar dezelfde map te kopiëren"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "Je account heeft geen toegangsrechten om afmetingen van alle geselecteerde afbeeldingen aan te passen."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Er zijn geen afbeeldingen beschikbaar voor het aanpassen van afmetingen."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "De afmetingen van de volgende afbeeldingen zullen worden aangepast:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "Kies een bestaande thumbnail optie of voer afmetingsopties in:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr "Waarschuwing: bestaande afmetingen van afbeeldingen zullen worden aangepast. Oorspronkelijke bestanden zullen verloren gaan. Maak eventueel eerst een kopie om de oorspronkelijke bestanden te behouden."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Afmetingen aanpassen"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files "
+"and/or folders."
+msgstr "Je account heeft geen toegangsrechten om alle geselecteerde bestanden en/of mappen te verplaatsen."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Er zijn geen bestanden en/of mappen beschikbaar om te verplaatsen."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr "De volgende bestanden en/of mappen zullen worden verplaatst naar een bestemmingsmap (huidige mapstructuur blijft behouden): "
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Verplaatsen"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Het is niet toegestaan om bestanden naar dezelfde map te verplaatsen"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "Je account heeft onvoldoende toegangsrechten om alle geselecteerde bestanden te hernoemen."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Er zijn geen bestanden beschikbaar om te hernoemen."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr "De volgende bestanden zullen worden hernoemd (de oorspronkelijke mapstructuur en bestandsnamen blijven behouden, alleen de weergave zal worden gewijzigd):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Hernoemen"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Ga terug naar de bovenliggende folder"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Wijzig eigenschappen van huidige map"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Wijzigen"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Klik hier om een zoekopdracht te doen voor de ingevoerde woorden"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Zoeken"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Sluiten"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limiteren"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Vink het aan om de zoekopdracht te beperken tot de huidige map"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Zoekopdracht beperken tot huidige map"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Voegt een nieuwe map toe"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Nieuwe map"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Bestanden uploaden"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Je moet eerst een map selecteren"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Naam"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Eigenaar"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Grootte"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Actie"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Wijzig eigenschappen map '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s map"
+msgstr[1] "%(counter)s mappen"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s bestand"
+msgstr[1] "%(counter)s bestanden"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Wijzig eigenschappen van de map"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Verwijder map"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Selecteer dit bestand"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Wijzig eigenschappen '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Toegangsrechten"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "uitgeschakeld"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "ingeschakeld"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "URL gekopieerd naar het klembord"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Canonical url '%(item_label)s'"
+msgstr "Gebruikelijke url '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Download '%(item_label)s'"
+msgstr "Download '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Verwijder bestand"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Sleep hier bestanden naartoe of gebruik de \"Bestanden uploaden\"-knop"
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Sleep je bestand om te uploaden naar:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Uploaden"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "annuleer"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Upload succesvol!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Upload geannuleerd!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "vorige"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Pagina %(number)s van %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "volgende"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Selecteer alle %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+#| msgid "Select this file"
+msgid "Select all"
+msgstr "Alles selecteren"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+#| msgid "Filer"
+msgid "Files"
+msgstr "Bestanden"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Toevoegen nieuwe"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Django site beheer"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Herstel onderstaande fout."
+msgstr[1] "Herstel onderstaande fouten."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Opslaan"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr "Je browser ondersteunt geen audio."
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr "Je browser ondersteunt geen video."
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Klembord"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Alle items hier plakken"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Verplaats alle klembord items naar"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Leeg klembord"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "het klembord is leeg"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "upload mislukt"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr "Download"
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr "Uitvouwen"
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+#| msgid "file missing"
+msgid "File is missing"
+msgstr "Bestand ontbreekt"
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Type"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Bestandsgrootte"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Gewijzigd"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Aangemaakt"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "gevonden"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "en"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "annuleer zoekopdracht"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Wissen"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "of sleep je bestand hier naartoe"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "geen bestand geselecteerd"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Opzoeken"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Kies bestand"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+#| msgid "Choose File"
+msgid "Choose Folder"
+msgstr "Kies Map"
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr "Bestand \"{file_name}\": Upload geweigerd door het beveiligingsbeleid van de site"
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr "Bestand \"{file_name}\": {file_type} upload geweigerd door het beveiligingsbeleid van de site"
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr "Bestand \"{file_name}\": HTML upload geweigerd door het beveiligingsbeleid van de site"
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr "Bestand \"{file_name}\": Afgewezen wegens mogelijke kwetsbaarheid voor cross-site scripting"
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr "Bestand \"{file_name}\": SVG bestandsformaat niet herkend"
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/nn/LC_MESSAGES/django.mo b/filer/locale/nn/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..379659ff7
Binary files /dev/null and b/filer/locale/nn/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/nn/LC_MESSAGES/django.po b/filer/locale/nn/LC_MESSAGES/django.po
new file mode 100644
index 000000000..255a1f963
--- /dev/null
+++ b/filer/locale/nn/LC_MESSAGES/django.po
@@ -0,0 +1,1253 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Eirik Krogstad , 2013
+# Eirik Krogstad , 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Eirik Krogstad , 2013\n"
+"Language-Team: Norwegian Nynorsk (http://app.transifex.com/divio/django-"
+"filer/language/nn/)\n"
+"Language: nn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Avansert"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Element må vere vald for å utføre handlingar på dei. Ingen element vart "
+"endra."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s vald"
+msgstr[1] "Alle %(total_count)s vald"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 av %(cnt)s vald"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Ingen handling vald."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "Flytta %(count)d filer til utklippstavla."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Flytt valde filer til utklippstavla"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Fjerna løyve for %(count)d filer."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Satte løyve for %(count)d filer."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Sett løyve for valde filer"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Fjern løyve for valde filer"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "Sletta %(count)d filer og/eller mapper."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Kan ikkje slette filer og/eller mapper"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Er du sikker?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Slett filer og/eller mapper"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Slett valde filer og/eller mapper"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "Flytta %(count)d filer og/eller mapper til mappa \"%(destination)s\"."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Flytt filer og/eller mapper"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Flytt valde filer og/eller mapper"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "Endra namn på %(count)d filer."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Endre namn på filer"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Kopierte %(count)d filer og/eller mapper til mappa \"%(destination)s\"."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Kopier filer og/eller mapper"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Kopier valde filer og/eller mapper"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Endra storleik på %(count)d bilete."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Endre storleik på bilete"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Endre storleik på valde bilete"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Ending som vert tilføyd filnamn på kopierte filer."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Ending bør vere ein gyldig, enkel del av filnamnet med små bokstavar, som "
+"\"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Ugyldig nykel \"%(key)s\" for endring av namn."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Ugyldig format for endring av namn: %(error)s"
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "miniatyrbileteval"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "breidd"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "høgd"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "skjering"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "oppskalering"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Miniatyrbileteval eller parametrar for endring av storleik må veljast."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Fokuseringsområde"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Ein mappe med dette namnet eksisterer allereie."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "standard alternativtekst"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "standard undertekst"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "fokuseringsområde"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "bilete"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "bilete"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "brukar"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "filer"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "utklippstavle"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "utklippstavler"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "fil"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "element på utklippstavle"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "element på utklippstavle"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "mappe"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "filstorleik"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "har alle påkravde data"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "originalt filnamn"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "namn"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "beskriving"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "eigar"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "lasta opp"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "endra"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Løyve er deaktivert"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "oppretta"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Mappe"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Mapper"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "alle element"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "berre dette elementet"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "dette elementet og alle underliggjande nivå"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "type"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "gruppe"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "alle"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "kan lese"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "kan redigere"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "kan leggje til undernivå"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "løyve for mappe"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "løyve for mappe"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "dato biletet vert tatt"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "opphavsperson"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "må alltid publisere opphavsperson"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "må alltid publisere opphavsrett"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "filer med manglande metadata"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "rot"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Utfør den valde handlinga"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Utfør"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Klikk her for å velje objekt på tvers av alle sider"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Vel alle %(total_count)s filer og/eller mapper"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Tøm utval"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Gå tilbake til administrasjonssida"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Heim"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Gå tilbake til Filer"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Gå tilbake til rotmappa"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Gå tilbake til mappa \"%(folder_name)s\""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Å slette dei valde filene og/eller mappene ville resultere i sletting av "
+"relaterte objekt, men din konto har ikkje løyve til å slette objekt av "
+"følgjande typer:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Å slette dei valde filene og/eller mappene ville kreve å slette følgjande "
+"beskytta relaterte objekt:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Er du sikker på at du vil slette dei valde filene og/eller mappene? Alle dei "
+"følgjande objekta og deira relaterte element vil verte sletta:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Historie"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Se på nettstaden"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Gå tilbake til"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "administrasjonssida"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Mappeikon"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+"Din konto har ikkje løyve til å kopiere alle dei valde filene og/eller "
+"mappene."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Det er ingen målmapper tilgjengelig."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Det er ingen filer og/eller mapper å kopiere."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Dei følgjande filene og/eller mappene vil verte kopiert til ein målmappe "
+"(mappestruktur vil behaldes):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Målmappe:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Kopier"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "Din konto har ikkje løyve til å endre storleik på alle valde bilete."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Det er ingen bilete å endre storleik på."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Dei følgjande bileta vil få endra storleik:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Vel eit eksisterande miniatyrbileteval eller skriv inn parametrar for "
+"endring av storleik:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Åtvaring: Bileta vil få sin storleik endra, og originalane vil gå tapt. Det "
+"kan være ønskjeleg å først gjere ein kopi for å behalde originalane."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Endre storleik"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Din konto har ikke løyve til å flytte alle dei valde filene og/eller mappene."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Det er ingen filer og/eller mapper å flytte."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Dei følgjande filene og/eller mappene vil verte flytta til ein målmappe "
+"(mappestruktur vil behaldes):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Flytt"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "Din konto har ikkje løyve til å endre namn på alle dei valde filene."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Det er ingen filer å endre namn på."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"Dei følgjande filene vil få endra namn (dei vil framleis vere på samme stad "
+"og behalde originalt filnamn, berre visningsnamn vil verte endra):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Endre namn"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Gå tilbake til overordna nivå"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Endre detaljar for gjeldande mappe"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Endre"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Søk"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Slett"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Legg til ein ny mappe"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Ny mappe"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Namn"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Eigar"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Endre detaljar for mappen \"%(item_label)s\""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Vel denne filen"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Endre detaljar for \"%(item_label)s\""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Løyve"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "deaktivert"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "aktivert"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Flytt valde filer til utklippstavla"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Last opp"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "førre"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "neste"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Legg til ny"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Ver venleg og rett feilen under"
+msgstr[1] "Ver venleg og rett feila under."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Lagre"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Utklippstavle"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Lim inn alle element her"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Flytt alle filer på utklippstavla til"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "utklippstavla er tom"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "feil ved opplasting"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "funne"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "og"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "avbryt søk"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Tøm"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "ingen fil vald"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Slå opp"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/pl/LC_MESSAGES/django.mo b/filer/locale/pl/LC_MESSAGES/django.mo
index 6307dfc78..99ec9f2ea 100644
Binary files a/filer/locale/pl/LC_MESSAGES/django.mo and b/filer/locale/pl/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/pl/LC_MESSAGES/django.po b/filer/locale/pl/LC_MESSAGES/django.po
index 955e1f67c..1f59250c7 100644
--- a/filer/locale/pl/LC_MESSAGES/django.po
+++ b/filer/locale/pl/LC_MESSAGES/django.po
@@ -3,485 +3,636 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# crunchorn , 2010.
+# Translators:
+# Translators:
+# crunchorn , 2010
+# Grzegorz Biały , 2017
+# Mateusz Marzantowicz , 2013
+# Piotr Wojcik , 2016
msgid ""
msgstr ""
-"Project-Id-Version: django-filer\n"
+"Project-Id-Version: django Filer\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-07-13 19:10+0200\n"
-"PO-Revision-Date: 2012-09-03 20:12+0100\n"
-"Last-Translator: Stefan Foulis \n"
-"Language-Team: LANGUAGE \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Grzegorz Biały , 2017\n"
+"Language-Team: Polish (http://app.transifex.com/divio/django-filer/language/"
+"pl/)\n"
+"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: pl\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
+"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
+"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
-#: views.py:103
-msgid "Folder with this name already exists."
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
msgstr ""
-#: admin/fileadmin.py:41
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
msgid "Advanced"
msgstr "Zaawansowane"
-#: admin/folderadmin.py:324 admin/folderadmin.py:427
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "kanoniczny URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
msgid ""
"Items must be selected in order to perform actions on them. No items have "
"been changed."
msgstr ""
+"Należy zaznaczyć elementy aby wykonań na nich jakąś akcję. Nie zaznaczono "
+"żadnych elementów."
-#: admin/folderadmin.py:344
+#: admin/folderadmin.py:434
#, python-format
msgid "%(total_count)s selected"
msgid_plural "All %(total_count)s selected"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zaznaczono %(total_count)s"
+msgstr[1] "zaznaczono %(total_count)s"
+msgstr[2] "Zaznaczono wszystkie %(total_count)s"
+msgstr[3] "Zaznaczono wszystkie %(total_count)s"
-#: admin/folderadmin.py:377
+#: admin/folderadmin.py:460
#, python-format
-msgid "0 of %(cnt)s selected"
+msgid "Directory listing for %(folder_name)s"
msgstr ""
-#: admin/folderadmin.py:456
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 z %(cnt)s zaznaczonych"
+
+#: admin/folderadmin.py:612
msgid "No action selected."
-msgstr ""
+msgstr "Nie zaznaczono akcji."
-#: admin/folderadmin.py:497
+#: admin/folderadmin.py:664
#, python-format
msgid "Successfully moved %(count)d files to clipboard."
-msgstr ""
+msgstr "Pomyślnie przeniesiono %(count)d plików do schowka."
-#: admin/folderadmin.py:503
+#: admin/folderadmin.py:669
msgid "Move selected files to clipboard"
-msgstr ""
+msgstr "Przenieś zaznaczone pliki do schowka"
-#: admin/folderadmin.py:537
+#: admin/folderadmin.py:709
#, python-format
msgid "Successfully disabled permissions for %(count)d files."
-msgstr ""
+msgstr "Pomyślnie wyłączono uprawnienia dla %(count)d plików."
-#: admin/folderadmin.py:541
+#: admin/folderadmin.py:711
#, python-format
msgid "Successfully enabled permissions for %(count)d files."
-msgstr ""
+msgstr "Pomyślnie włączono uprawnienia dla %(count)d plików."
-#: admin/folderadmin.py:550
+#: admin/folderadmin.py:719
msgid "Enable permissions for selected files"
-msgstr ""
+msgstr "Włącz uprawnienia dla wybranych plików"
-#: admin/folderadmin.py:555
+#: admin/folderadmin.py:725
msgid "Disable permissions for selected files"
-msgstr ""
+msgstr "Wyłącz uprawnienia dla wybranych plików"
-#: admin/folderadmin.py:623
+#: admin/folderadmin.py:789
#, python-format
msgid "Successfully deleted %(count)d files and/or folders."
-msgstr ""
+msgstr "Pomyślnie usunięto %(count)d plików i/lub katalogów."
-#: admin/folderadmin.py:630
+#: admin/folderadmin.py:794
msgid "Cannot delete files and/or folders"
-msgstr ""
+msgstr "Nie można usunąć plików i/lub katalogów"
-#: admin/folderadmin.py:632
+#: admin/folderadmin.py:796
msgid "Are you sure?"
-msgstr ""
+msgstr "Czy na pewno?"
-#: admin/folderadmin.py:637
+#: admin/folderadmin.py:802
msgid "Delete files and/or folders"
-msgstr ""
+msgstr "Usuń pliki i/lub katalogi"
-#: admin/folderadmin.py:656
+#: admin/folderadmin.py:823
msgid "Delete selected files and/or folders"
-msgstr ""
+msgstr "Usuń zaznaczone pliki i/lub katalogi"
-#: admin/folderadmin.py:771
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Katalogi z nazwami %s już istnieją w podanej lokacji"
+
+#: admin/folderadmin.py:934
#, python-format
msgid ""
"Successfully moved %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
+"Pomyślnie przeniesiono %(count)d plików i/lub katalogów do '%(destination)s'."
-#: admin/folderadmin.py:778 admin/folderadmin.py:780
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
msgid "Move files and/or folders"
-msgstr ""
+msgstr "Przenieś pliki i/lub katalogi"
-#: admin/folderadmin.py:797
+#: admin/folderadmin.py:959
msgid "Move selected files and/or folders"
-msgstr ""
+msgstr "Przenieś zaznaczone pliki i/lub katalogi"
-#: admin/folderadmin.py:854
+#: admin/folderadmin.py:1016
#, python-format
msgid "Successfully renamed %(count)d files."
-msgstr ""
+msgstr "Pomyślnie zmieniono nazwę %(count)d plików."
-#: admin/folderadmin.py:862 admin/folderadmin.py:864 admin/folderadmin.py:881
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
msgid "Rename files"
-msgstr ""
+msgstr "Zmień nazwy plików"
-#: admin/folderadmin.py:975
+#: admin/folderadmin.py:1137
#, python-format
msgid ""
"Successfully copied %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
+"Pomyślnie skopiowano %(count)d plików i/lub katalogów di '%(destination)s'."
-#: admin/folderadmin.py:989 admin/folderadmin.py:991
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
msgid "Copy files and/or folders"
-msgstr ""
+msgstr "Skopiuj pliki i/lub katalogi"
-#: admin/folderadmin.py:1010
+#: admin/folderadmin.py:1174
msgid "Copy selected files and/or folders"
-msgstr ""
+msgstr "Skopiuj zaznaczone pliki i/lub katalogi"
-#: admin/folderadmin.py:1105
+#: admin/folderadmin.py:1279
#, python-format
msgid "Successfully resized %(count)d images."
-msgstr ""
+msgstr "Pomyślnie zmieniono rozmiar %(count)d obrazów."
-#: admin/folderadmin.py:1113 admin/folderadmin.py:1115
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
msgid "Resize images"
-msgstr ""
+msgstr "Zmień rozmiar obrazów"
-#: admin/folderadmin.py:1133
+#: admin/folderadmin.py:1303
msgid "Resize selected images"
-msgstr ""
+msgstr "Zmień rozmiar zaznaczonych obrazów"
-#: admin/forms.py:26
+#: admin/forms.py:24
msgid "Suffix which will be appended to filenames of copied files."
-msgstr ""
+msgstr "Przyrostek, który zostanie dodany do nazw skopiowanych plików."
-#: admin/forms.py:33
+#: admin/forms.py:31
#, python-format
msgid ""
"Suffix should be a valid, simple and lowercase filename part, like "
"\"%(valid)s\"."
msgstr ""
+"Przyrostek powinien być poprawną, prostą, składającą się z małych liter "
+"częścią nazwy pliku, np. \"%(valid)s\""
-#: admin/forms.py:54
+#: admin/forms.py:52
#, python-format
msgid "Unknown rename format value key \"%(key)s\"."
-msgstr ""
+msgstr "Nieznany format klucza \"%(key)s\"."
-#: admin/forms.py:56
+#: admin/forms.py:54
#, python-format
msgid "Invalid rename format: %(error)s."
-msgstr ""
+msgstr "Niepoprawny format: %(error)s."
-#: admin/forms.py:62
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
msgid "thumbnail option"
-msgstr ""
+msgstr "opcje miniatur"
-#: admin/forms.py:63
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
msgid "width"
-msgstr ""
+msgstr "szerokość"
-#: admin/forms.py:64
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
msgid "height"
-msgstr ""
+msgstr "wysokość"
-#: admin/forms.py:65
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
msgid "crop"
-msgstr ""
+msgstr "przytnij"
-#: admin/forms.py:66
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
msgid "upscale"
-msgstr ""
+msgstr "skaluj"
-#: admin/forms.py:71
+#: admin/forms.py:79
msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Opcja miniatury albo parametry zmiany rozmiaru muszą być określone."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Współrzędne obiektu"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Współrzędne głównego obiektu prezentowanej sceny. Format: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Niepoprawny format współrzędnych obiektu."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Współrzędne obiektu znajdują się poza obrazem."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Twój wpis: \"{subject_location}\"."
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
msgstr ""
-#: admin/forms.py:73
-msgid "Resize parameters must be choosen."
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
msgstr ""
-#: admin/imageadmin.py:12
-msgid "Subject location"
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Katalog o podanej nazwie już istnieje."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Biblioteka mediów"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "domyślny tekst alternatywny"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "domyślna etykieta"
+
+#: models/abstract.py:76
+msgid "subject location"
msgstr "Współrzędne obiektu"
-#: admin/imageadmin.py:13
-msgid "Location of the main subject of the scene."
-msgstr "Współrzędne głownego obiektu prezentowanej sceny"
+#: models/abstract.py:91
+msgid "image"
+msgstr "obraz"
-#: models/clipboardmodels.py:9 models/foldermodels.py:236
+#: models/abstract.py:92
+msgid "images"
+msgstr "obrazy"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
msgid "user"
msgstr "użytkownik"
-#: models/clipboardmodels.py:11 models/filemodels.py:287
+#: models/clipboardmodels.py:17 models/filemodels.py:157
msgid "files"
-msgstr ""
+msgstr "pliki"
-#: models/clipboardmodels.py:34 models/clipboardmodels.py:40
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
msgid "clipboard"
-msgstr ""
+msgstr "schowek"
-#: models/clipboardmodels.py:35
+#: models/clipboardmodels.py:25
msgid "clipboards"
-msgstr ""
+msgstr "schowki"
-#: models/clipboardmodels.py:39 models/filemodels.py:35
-#: models/filemodels.py:286
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
msgid "file"
-msgstr ""
+msgstr "plik"
-#: models/clipboardmodels.py:44
+#: models/clipboardmodels.py:56
msgid "clipboard item"
-msgstr ""
+msgstr "element schowka"
-#: models/clipboardmodels.py:45
+#: models/clipboardmodels.py:57
msgid "clipboard items"
-msgstr ""
+msgstr "elementy schowka"
-#: models/filemodels.py:33 templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
#: templates/admin/filer/folder/new_folder_form.html:4
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
msgid "folder"
msgstr "katalog"
-#: models/filemodels.py:36
+#: models/filemodels.py:81
msgid "file size"
-msgstr ""
+msgstr "rozmiar pliku"
-#: models/filemodels.py:38
+#: models/filemodels.py:87
msgid "sha1"
-msgstr ""
+msgstr "sha1"
-#: models/filemodels.py:40
+#: models/filemodels.py:94
msgid "has all mandatory data"
-msgstr ""
+msgstr "posiada wszystkie potrzebne dane"
-#: models/filemodels.py:42
+#: models/filemodels.py:100
msgid "original filename"
-msgstr ""
+msgstr "oryginalna nazwa pliku"
-#: models/filemodels.py:44 models/foldermodels.py:99
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
msgid "name"
-msgstr ""
+msgstr "nazwa"
-#: models/filemodels.py:46
+#: models/filemodels.py:116
msgid "description"
-msgstr ""
+msgstr "opis"
-#: models/filemodels.py:50
+#: models/filemodels.py:125 models/foldermodels.py:108
msgid "owner"
-msgstr ""
+msgstr "właściciel"
-#: models/filemodels.py:52 models/foldermodels.py:105
+#: models/filemodels.py:129 models/foldermodels.py:116
msgid "uploaded at"
-msgstr ""
+msgstr "zaktualizowano"
-#: models/filemodels.py:53 models/foldermodels.py:108
+#: models/filemodels.py:134 models/foldermodels.py:126
msgid "modified at"
-msgstr ""
+msgstr "zmieniono"
-#: models/filemodels.py:57
+#: models/filemodels.py:140
msgid "Permissions disabled"
+msgstr "Uprawnienia wyłączone"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
msgstr ""
+"Wyłącz jakiekolwiek sprawdzanie uprawnień dla tego pliku. Plik będzie "
+"dostępny publicznie dla wszystkich."
-#: models/filemodels.py:58
-msgid "Disable any permission checking for this "
+#: models/foldermodels.py:94
+msgid "parent"
msgstr ""
-#: models/foldermodels.py:107
+#: models/foldermodels.py:121
msgid "created at"
-msgstr ""
+msgstr "utworzono"
-#: models/foldermodels.py:211
-#: templates/admin/filer/widgets/admin_folder.html:3
-#: templates/admin/filer/widgets/admin_folder.html:5
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Folder"
-msgstr ""
+msgstr "Katalog"
-#: models/foldermodels.py:212
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
msgid "Folders"
msgstr "Katalogi"
-#: models/foldermodels.py:227
+#: models/foldermodels.py:260
msgid "all items"
msgstr "wszystkie elementy"
-#: models/foldermodels.py:228
+#: models/foldermodels.py:261
msgid "this item only"
-msgstr "tylko ten katalog"
+msgstr "tylko ten element"
-#: models/foldermodels.py:229
+#: models/foldermodels.py:262
msgid "this item and all children"
msgstr "ten katalog i wszystkie podrzędne"
-#: models/foldermodels.py:233
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "zezwól"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "zabroń"
+
+#: models/foldermodels.py:280
msgid "type"
msgstr "typ"
-#: models/foldermodels.py:239
+#: models/foldermodels.py:297
msgid "group"
msgstr "grupa"
-#: models/foldermodels.py:240
+#: models/foldermodels.py:304
msgid "everybody"
msgstr "wszyscy"
-#: models/foldermodels.py:242
-msgid "can edit"
-msgstr "może edytować"
-
-#: models/foldermodels.py:243
+#: models/foldermodels.py:309
msgid "can read"
msgstr "może wyświetlić"
-#: models/foldermodels.py:244
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "może edytować"
+
+#: models/foldermodels.py:325
msgid "can add children"
-msgstr "może dodawać el. podrzędne"
+msgstr "może dodawać elementy podrzędne"
-#: models/foldermodels.py:273
+#: models/foldermodels.py:333
msgid "folder permission"
-msgstr ""
+msgstr "uprawnienie katalogu"
-#: models/foldermodels.py:274
+#: models/foldermodels.py:334
msgid "folder permissions"
+msgstr "uprawnienia katalogu"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
msgstr ""
-#: models/imagemodels.py:39
-msgid "date taken"
-msgstr "Data wykonania"
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
-#: models/imagemodels.py:42
-msgid "default alt text"
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
msgstr ""
-#: models/imagemodels.py:43
-msgid "default caption"
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
msgstr ""
-#: models/imagemodels.py:45 templates/image_filer/image.html:6
-msgid "author"
-msgstr "autor"
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
-#: models/imagemodels.py:47
-msgid "must always publish author credit"
+#: models/foldermodels.py:362
+msgid "Logical Path"
msgstr ""
-#: models/imagemodels.py:48
-msgid "must always publish copyright"
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
msgstr ""
-#: models/imagemodels.py:50
-msgid "subject location"
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
msgstr ""
-#: models/imagemodels.py:200
-msgid "image"
+#: models/foldermodels.py:375
+msgid "Everybody"
msgstr ""
-#: models/imagemodels.py:201
-msgid "images"
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
msgstr ""
-#: models/virtualitems.py:45
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "unfiled files"
-msgstr "Luźne pliki"
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "data wykonania"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "musi zawsze opublikować udział autora"
-#: models/virtualitems.py:59
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "musi zawsze opublikować prawa autorskie"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "szerokość w pikselach"
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "wysokość w pikselach"
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "opcje miniatur"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Nieuporządkowane Przesłane"
+
+#: models/virtualitems.py:73
msgid "files with missing metadata"
-msgstr "pliki z wybrakowanymi metadanymi"
+msgstr "pliki z brakującymi metadanymi"
-#: models/virtualitems.py:73 templates/admin/filer/breadcrumbs.html:6
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:10
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
msgid "root"
msgstr "Katalog główny"
-#: templates/admin/filer/actions.html:4
-msgid "Run the selected action"
+#: settings.py:273
+msgid "Show table view"
msgstr ""
-#: templates/admin/filer/actions.html:4
-msgid "Go"
+#: settings.py:278
+msgid "Show thumbnail view"
msgstr ""
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Wykonaj wybraną akcję"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Idź"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
msgid "Click here to select the objects across all pages"
-msgstr ""
+msgstr "Kliknij tutaj aby zaznaczyć obiekty na wszystkich stronach"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
#, python-format
msgid "Select all %(total_count)s files and/or folders"
-msgstr ""
+msgstr "Zaznacz wszystkie %(total_count)s pliki i/lub katalogi"
-#: templates/admin/filer/actions.html:13
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
msgid "Clear selection"
-msgstr ""
+msgstr "Wyczyść zaznaczenie"
#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
msgid "Go back to admin homepage"
msgstr "Wróć do panelu administracyjnego"
#: templates/admin/filer/breadcrumbs.html:4
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
msgid "Home"
msgstr "Początek"
#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
msgid "Go back to Filer app"
msgstr "Wróć do aplikacji Filer"
-#: templates/admin/filer/breadcrumbs.html:5
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/image_filer/image_export_form.html:8
-msgid "Filer"
-msgstr "Filer"
-
#: templates/admin/filer/breadcrumbs.html:6
-#: templates/image_filer/image_export_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Go back to root folder"
msgstr "Wróć do katalogu głównego"
#: templates/admin/filer/breadcrumbs.html:8
-#: templates/admin/filer/breadcrumbs.html:11
-#: templates/admin/filer/folder/change_form.html:11
-#: templates/image_filer/image_export_form.html:12
-#: templates/image_filer/image_export_form.html:14
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
#, python-format
msgid "Go back to '%(folder_name)s' folder"
msgstr "Przejdź do katalogu '%(folder_name)s'"
-#: templates/admin/filer/change_form.html:28
-msgid "duplicates"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:13
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the "
-"following protected related objects:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:29
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:34
-#: templates/admin/filer/delete_selected_files_confirmation.html:45
-msgid "Yes, I'm sure"
-msgstr ""
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplikaty"
#: templates/admin/filer/delete_selected_files_confirmation.html:11
msgid ""
@@ -489,402 +640,636 @@ msgid ""
"objects, but your account doesn't have permission to delete the following "
"types of objects:"
msgstr ""
+"Usunięcie zaznaczonych plików i/lub katalogów spowoduje usunięcie "
+"powiązanych obiektów, niestety Twoje konto nie posiada uprawnień do "
+"usunięcia następujących typów obiektów:"
#: templates/admin/filer/delete_selected_files_confirmation.html:19
msgid ""
"Deleting the selected files and/or folders would require deleting the "
"following protected related objects:"
msgstr ""
+"Usunięcie zaznaczonych plików i/lub katalogów wymaga usunięcia następujących "
+"chronionych obiektów powiązanych:"
#: templates/admin/filer/delete_selected_files_confirmation.html:27
msgid ""
"Are you sure you want to delete the selected files and/or folders? All of "
"the following objects and their related items will be deleted:"
msgstr ""
+"Czy na pewno chcesz usunąć zaznaczone pliki i/lub katalogi? Następujące "
+"obiekty oraz powiązane z nimi elementy zostaną usunięte:"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:7
-#: templates/image_filer/image_export_form.html:8
-#: templates/image_filer/image_export_form.html:16
-msgid "Go back to"
-msgstr "Wróć do"
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Nie, wróć"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
-msgid "admin homepage"
-msgstr "panelu administracyjnego"
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Tak, na pewno"
-#: templates/admin/filer/folder/change_form.html:22
-#: templates/admin/filer/image/change_form.html:9
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
msgid "History"
msgstr "Historia"
+#: templates/admin/filer/file/change_form.html:37
#: templates/admin/filer/folder/change_form.html:23
-#: templates/admin/filer/image/change_form.html:10
+#: templates/admin/filer/image/change_form.html:37
msgid "View on site"
msgstr "Zobacz na stronie"
-#: templates/admin/filer/folder/change_form.html:35
-#: templates/admin/filer/folder/directory_listing.html:75
-#: templates/admin/filer/folder/directory_listing.html:85
-#: templates/admin/filer/folder/directory_table.html:23
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Wróć do"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "panelu administracyjnego"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
msgid "Folder Icon"
msgstr "Ikona katalogu"
-#: templates/admin/filer/folder/choose_copy_destination.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:23
msgid ""
"Your account doesn't have permissions to copy all of the selected files and/"
"or folders."
msgstr ""
+"Twoje konto nie ma uprawnień do skopiowania wszystkich zaznaczonych plików i/"
+"lub katalogów."
-#: templates/admin/filer/folder/choose_copy_destination.html:15
-#: templates/admin/filer/folder/choose_move_destination.html:15
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Powróć"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
msgid "There are no destination folders available."
-msgstr ""
+msgstr "Brak dostępnych katalogów docelowych."
-#: templates/admin/filer/folder/choose_copy_destination.html:18
+#: templates/admin/filer/folder/choose_copy_destination.html:35
msgid "There are no files and/or folders available to copy."
-msgstr ""
+msgstr "Brak dostępnych plików i/lub katalogów do skopiowania."
-#: templates/admin/filer/folder/choose_copy_destination.html:20
+#: templates/admin/filer/folder/choose_copy_destination.html:40
msgid ""
"The following files and/or folders will be copied to a destination folder "
"(retaining their tree structure):"
msgstr ""
+"Następujące pliki i/lub katalogi zostaną skopiowane do katalogu docelowego "
+"(z zachowaniem ich struktury):"
-#: templates/admin/filer/folder/choose_copy_destination.html:32
-#: templates/admin/filer/folder/choose_move_destination.html:32
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
msgid "Destination folder:"
-msgstr ""
+msgstr "Katalog docelowy:"
-#: templates/admin/filer/folder/choose_copy_destination.html:39
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
msgid "Copy"
-msgstr ""
+msgstr "Skopiuj"
-#: templates/admin/filer/folder/choose_images_resize_options.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Nie można kopiować plików to tego samego folderu"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
msgid ""
"Your account doesn't have permissions to resize all of the selected images."
msgstr ""
+"Twoje konto nie ma uprawnień do zmiany rozmiaru wszystkich zaznaczonych "
+"obrazów."
-#: templates/admin/filer/folder/choose_images_resize_options.html:15
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
msgid "There are no images available to resize."
-msgstr ""
+msgstr "Brak dostępnych obrazów do zmiany ich rozmiaru."
-#: templates/admin/filer/folder/choose_images_resize_options.html:17
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
msgid "The following images will be resized:"
-msgstr ""
-
-#: templates/admin/filer/folder/choose_images_resize_options.html:30
-msgid "Choose an existing thumbnail option or enter resize parameters:"
-msgstr ""
+msgstr "Następujące obrazy będą miały zmieniony rozmiar:"
#: templates/admin/filer/folder/choose_images_resize_options.html:32
-msgid "Choose resize parameters:"
+msgid "Choose an existing thumbnail option or enter resize parameters:"
msgstr ""
+"Wybierz istniejącą opcje miniatury albo wprowadź parametry zmiany rozmiaru:"
-#: templates/admin/filer/folder/choose_images_resize_options.html:35
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
msgid ""
"Warning: Images will be resized in-place and originals will be lost. Maybe "
"first make a copy of them to retain the originals."
msgstr ""
+"Uwaga: Rozmiary obrazów zostanie zmienione w miejscu a oryginały zostaną "
+"utracone. W celu zachowania oryginałów, najpierw wykonaj ich kopię."
-#: templates/admin/filer/folder/choose_images_resize_options.html:36
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
msgid "Resize"
-msgstr ""
+msgstr "Zmień rozmiar"
-#: templates/admin/filer/folder/choose_move_destination.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:35
msgid ""
"Your account doesn't have permissions to move all of the selected files and/"
"or folders."
msgstr ""
+"Twoje konto nie ma uprawnień do przeniesienia wszystkich zaznaczonych plików "
+"i/lub katalogów."
-#: templates/admin/filer/folder/choose_move_destination.html:18
+#: templates/admin/filer/folder/choose_move_destination.html:47
msgid "There are no files and/or folders available to move."
-msgstr ""
+msgstr "Brak plików i/lub folderów do przeniesienia."
-#: templates/admin/filer/folder/choose_move_destination.html:20
+#: templates/admin/filer/folder/choose_move_destination.html:52
msgid ""
"The following files and/or folders will be moved to a destination folder "
"(retaining their tree structure):"
msgstr ""
+"Następujące pliki i/lub katalogi zostaną przeniesione do katalogu docelowego "
+"(z zachowaniem ich struktury):"
-#: templates/admin/filer/folder/choose_move_destination.html:38
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
msgid "Move"
-msgstr ""
+msgstr "Przenieś"
-#: templates/admin/filer/folder/choose_rename_format.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Nie można przenieść plików do tego samego folderu"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
msgid ""
"Your account doesn't have permissions to rename all of the selected files."
msgstr ""
+"Twoje konto nie posiada uprawnień do zmiany nazwy wszystkich zaznaczonych "
+"plików."
-#: templates/admin/filer/folder/choose_rename_format.html:15
+#: templates/admin/filer/folder/choose_rename_format.html:18
msgid "There are no files available to rename."
-msgstr ""
+msgstr "Brak dostępnych plików do zmiany nazwy."
-#: templates/admin/filer/folder/choose_rename_format.html:17
+#: templates/admin/filer/folder/choose_rename_format.html:20
msgid ""
"The following files will be renamed (they will stay in their folders and "
"keep original filename, only displayed filename will be changed):"
msgstr ""
+"Następujące pliki będą miały zmienioną nazwę (pliki pozostaną w swoich "
+"katalogach i zachowają oryginalne nazwy, zmieni się jedynie ich wyświetlana "
+"nazwa):"
-#: templates/admin/filer/folder/choose_rename_format.html:54
+#: templates/admin/filer/folder/choose_rename_format.html:59
msgid "Rename"
-msgstr ""
+msgstr "Zmień nazwę"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Wróć do katalogu nadrzędnego"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Zmień dane aktualnie wyświetlanego katalogu"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Zmień"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Kliknij tutaj aby szukać daną frazę"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Szukaj"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Zamknij"
-#: templates/admin/filer/folder/directory_listing.html:66
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limit"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Zaznacz, by ograniczyć szukanie do bieżącego folderu"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Ogranicz szukanie do bieżącego folderu"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Usuń"
+
+#: templates/admin/filer/folder/directory_listing.html:203
msgid "Adds a new Folder"
msgstr "Dodaje nowy katalog"
-#: templates/admin/filer/folder/directory_listing.html:66
-#: templates/image_filer/include/export_dialog.html:34
+#: templates/admin/filer/folder/directory_listing.html:206
msgid "New Folder"
msgstr "Nowy katalog"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "upload files"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Wyślij Pliki"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "Upload"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Musisz najpierw wybrać katalog"
-#: templates/admin/filer/folder/directory_listing.html:74
-msgid "Go back to the parent folder"
-msgstr "Wróć do katalogu nadrzędnego"
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Nazwa"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Właściciel"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Rozmiar"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Akcja"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Zmień dane katalogu '%(item_label)s'"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
#, python-format
-msgid "1 folder"
+msgid "%(counter)s folder"
msgid_plural "%(counter)s folders"
msgstr[0] "%(counter)s katalog"
msgstr[1] "%(counter)s katalogi"
msgstr[2] "%(counter)s katalogów"
+msgstr[3] "%(counter)s katalogów"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:19
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
#, python-format
-msgid "1 file"
+msgid "%(counter)s file"
msgid_plural "%(counter)s files"
msgstr[0] "%(counter)s plik"
msgstr[1] "%(counter)s pliki"
msgstr[2] "%(counter)s plików"
+msgstr[3] "%(counter)s plików"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Zmień dane katalogu"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Usuń katalog"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Wybierz ten plik"
-#: templates/admin/filer/folder/directory_listing.html:80
-msgid "Change current folder details"
-msgstr "Zmodyfikuj dane aktualnie wyświetlanego katalogu"
-
-#: templates/admin/filer/folder/directory_listing.html:80
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:43
-msgid "Change"
-msgstr "Zmień"
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Zmień dane '%(item_label)s'"
-#: templates/admin/filer/folder/directory_table.html:13
-msgid "Name"
-msgstr "Nazwa"
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Uprawnienia"
-#: templates/admin/filer/folder/directory_table.html:23
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:29
-#, python-format
-msgid "Change '%(item_label)s' folder details"
-msgstr "Zmodyfikuj dane katalogu '%(item_label)s'"
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "wyłączony"
-#: templates/admin/filer/folder/directory_table.html:30
-#: templates/admin/filer/folder/directory_table.html:45
-msgid "Owner"
-msgstr "Właściciel"
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "włączony"
-#: templates/admin/filer/folder/directory_table.html:37
-msgid "Select this file"
-msgstr "Wybierz ten plik"
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Przenieś zaznaczone pliki do schowka"
-#: templates/admin/filer/folder/directory_table.html:39
-#: templates/admin/filer/folder/directory_table.html:43
-#: templates/admin/filer/folder/directory_table.html:44
+#: templates/admin/filer/folder/directory_table_list.html:147
#, python-format
-msgid "Change '%(item_label)s' details"
-msgstr "Zmodyfikuj dane '%(item_label)s'"
+msgid "Canonical url '%(item_label)s'"
+msgstr "Kanoniczny url '%(item_label)s'"
-#: templates/admin/filer/folder/directory_table.html:42
+#: templates/admin/filer/folder/directory_table_list.html:151
#, python-format
-msgid "Delete '%(item_label)s'"
-msgstr ""
+msgid "Download '%(item_label)s'"
+msgstr "Pobierz '%(item_label)s'"
-#: templates/admin/filer/folder/directory_table.html:42
-msgid "Delete"
-msgstr ""
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Usuń plik"
-#: templates/admin/filer/folder/directory_table.html:46
-msgid "Permissions"
-msgstr ""
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Upuść pliki tutaj lub kliknij na przycisk \"Wyślij Pliki\" "
-#: templates/admin/filer/folder/directory_table.html:46
-msgid "disabled"
-msgstr ""
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Upuść plik by wysłać go do:"
-#: templates/admin/filer/folder/directory_table.html:46
-msgid "enabled"
-msgstr ""
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Upload"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "anuluj"
-#: templates/admin/filer/folder/directory_table.html:50
-msgid "Move to clipboard"
-msgstr "Przenieś do schowka"
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Wysłano pomyślnie!"
-#: templates/admin/filer/folder/directory_table.html:58
-msgid "there are no files or subfolders"
-msgstr "Nie dodano tutaj jeszcze żadnych plików, bądź katalogów"
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Wysyłanie anulowane!"
-#: templates/admin/filer/folder/directory_table.html:65
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
msgid "previous"
-msgstr ""
+msgstr "poprzedni"
-#: templates/admin/filer/folder/directory_table.html:69
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
#, python-format
-msgid ""
-"\n"
-" Page %(number)s of %(num_pages)s.\n"
-" "
-msgstr ""
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Strona %(number)s z %(num_pages)s."
-#: templates/admin/filer/folder/directory_table.html:75
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
msgid "next"
+msgstr "następny"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Wybierz wszystkie %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
msgstr ""
#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
msgid "Add new"
msgstr "Dodaj nowy"
-#: templates/admin/filer/folder/new_folder_form.html:13
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Proszę naprawić poniższy błąd."
+msgstr[1] "Proszę naprawić poniższe błędy."
+msgstr[2] "Proszę naprawić poniższe błędy."
+msgstr[3] "Proszę naprawić poniższe błędy."
-#: templates/admin/filer/folder/new_folder_form.html:28
+#: templates/admin/filer/folder/new_folder_form.html:30
msgid "Save"
msgstr "Zapisz"
-#: templates/admin/filer/image/change_form.html:21
-msgid "Full size preview"
-msgstr "Pełnowymiarowy podgląd"
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:8
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Search"
-msgstr "Szukaj"
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Schowek"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Wklej tutaj wszystkie elementy"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Przenieś wszystkie elementy schowka do"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Wyczyść Schowek"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "schowek jest pusty"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "Nie udało się przesłać pliku"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:13
-msgid "Enter your search phrase here"
-msgstr "Wprowadź kryteria wyszukiwania"
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Click here to"
-msgstr "Kliknij tutaj by"
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:14
-msgid "run search for entered phrase"
-msgstr "wyszukaj wprowadzoną frazę"
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Typ"
-#: templates/admin/filer/tools/search_form.html:15
-msgid "Check it to"
-msgstr "Zaznacz by"
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Rozmiar pliku"
-#: templates/admin/filer/tools/search_form.html:15
-#: templates/admin/filer/tools/search_form.html:16
-msgid "limit the search to current folder"
-msgstr "wyszukaj tylko w tym katalogu"
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Modyfikowano"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Utworzono"
+
+#: templates/admin/filer/tools/search_form.html:5
msgid "found"
msgstr "znaleziono"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/search_form.html:5
msgid "and"
msgstr "i"
-#: templates/admin/filer/tools/search_form.html:19
+#: templates/admin/filer/tools/search_form.html:7
msgid "cancel search"
msgstr "anuluj wyszukiwanie"
-#: templates/admin/filer/tools/upload_button_js.html:24
-#: templates/admin/filer/widgets/admin_file.html:7
-#: templates/admin/filer/widgets/admin_file.html:8
-msgid "file missing"
-msgstr ""
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Usuń"
-#: templates/admin/filer/tools/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr "Schowek"
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "lub upuść swój plik tutaj"
-#: templates/admin/filer/tools/clipboard/clipboard.html:19
-msgid "Paste all items here"
-msgstr "Wklej tutaj wszystkie elementy"
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "brak zaznaczonych plików"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "discard"
-msgstr "odrzuć"
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Wyszukaj"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "Move all clipboard files to"
-msgstr "Przenieś wszystkie el. schowka do"
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Wybierz plik"
-#: templates/admin/filer/tools/clipboard/clipboard.html:43
-msgid "the clipboard is empty"
-msgstr "schowek jest pusty"
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
-#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:11
-msgid "upload failed"
-msgstr "Nie udało się przesłać pliku"
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:11
-msgid "no file selected"
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:14
-#: templates/admin/filer/widgets/admin_file.html:15
-#: templates/admin/filer/widgets/admin_folder.html:7
-#: templates/admin/filer/widgets/admin_folder.html:8
-msgid "Lookup"
-msgstr "Wyszukaj"
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:17
-#: templates/admin/filer/widgets/admin_folder.html:10
-msgid "Clear"
-msgstr "Usuń"
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
-#: templates/admin/filer/widgets/admin_folder.html:5
-msgid "none selected"
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
msgstr ""
-#: templates/image_filer/folder.html:3
-#, python-format
-msgid "Folder '%(folder_label)s' files"
-msgstr "Pliki w katalogu '%(folder_label)s' "
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
-#: templates/image_filer/folder.html:6
-msgid "File name"
-msgstr "Nazwa pliku"
+#~ msgid "none selected"
+#~ msgstr "none selected"
-#: templates/image_filer/image_export_form.html:17
-msgid "export"
-msgstr "eksport"
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
-#: templates/image_filer/image_export_form.html:27
-msgid "download image"
-msgstr "pobierz obrazek"
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
-#: templates/image_filer/include/export_dialog.html:13
-msgid "Folder name already taken."
-msgstr "Katalog o podanej nazwie juz istnieje"
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+#~ msgstr[3] "15c0f2d28d6dab1af1f6d94906beb627_pl_3"
-#: templates/image_filer/include/export_dialog.html:15
-msgid "Submit"
-msgstr "Wyślij"
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/pt/LC_MESSAGES/django.mo b/filer/locale/pt/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..6a145895c
Binary files /dev/null and b/filer/locale/pt/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/pt/LC_MESSAGES/django.po b/filer/locale/pt/LC_MESSAGES/django.po
new file mode 100644
index 000000000..78553fbd5
--- /dev/null
+++ b/filer/locale/pt/LC_MESSAGES/django.po
@@ -0,0 +1,1230 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Portuguese (http://app.transifex.com/divio/django-filer/"
+"language/pt/)\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
+"1000000 == 0 ? 1 : 2;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/pt_BR/LC_MESSAGES/django.mo b/filer/locale/pt_BR/LC_MESSAGES/django.mo
index c65986b60..423ed55ba 100644
Binary files a/filer/locale/pt_BR/LC_MESSAGES/django.mo and b/filer/locale/pt_BR/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/pt_BR/LC_MESSAGES/django.po b/filer/locale/pt_BR/LC_MESSAGES/django.po
index 755a254d1..220c55c5c 100644
--- a/filer/locale/pt_BR/LC_MESSAGES/django.po
+++ b/filer/locale/pt_BR/LC_MESSAGES/django.po
@@ -3,482 +3,638 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Translators:
+# Translators:
+# Claudio Rogerio Carvalho Filho , 2017
+# Julio Lucchese , 2018
+# Rodrigo , 2013
msgid ""
msgstr ""
-"Project-Id-Version: django-filer\n"
+"Project-Id-Version: django Filer\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-07-13 19:10+0200\n"
-"PO-Revision-Date: 2012-09-03 20:12+0100\n"
-"Last-Translator: Stefan Foulis \n"
-"Language-Team: LANGUAGE \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Julio Lucchese , 2018\n"
+"Language-Team: Portuguese (Brazil) (http://app.transifex.com/divio/django-"
+"filer/language/pt_BR/)\n"
+"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: pt_BR\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
+"1000000 == 0 ? 1 : 2;\n"
-#: views.py:103
-msgid "Folder with this name already exists."
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
msgstr ""
-#: admin/fileadmin.py:41
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
msgid "Advanced"
msgstr "Avançado"
-#: admin/folderadmin.py:324 admin/folderadmin.py:427
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "URL canônico"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
msgid ""
"Items must be selected in order to perform actions on them. No items have "
"been changed."
msgstr ""
+"itens precisam ser selecionar para que a ação seja executada. Nenhuma "
+"alteração foi efetuada."
-#: admin/folderadmin.py:344
+#: admin/folderadmin.py:434
#, python-format
msgid "%(total_count)s selected"
msgid_plural "All %(total_count)s selected"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%(total_count)s selecionado"
+msgstr[1] "Todos %(total_count)s selecionados"
+msgstr[2] "Todos %(total_count)s selecionados"
-#: admin/folderadmin.py:377
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Listando diretório para %(folder_name)s"
+
+#: admin/folderadmin.py:475
#, python-format
msgid "0 of %(cnt)s selected"
-msgstr ""
+msgstr "0 de %(cnt)s selecionados"
-#: admin/folderadmin.py:456
+#: admin/folderadmin.py:612
msgid "No action selected."
-msgstr ""
+msgstr "Nenhuma ação selecionada."
-#: admin/folderadmin.py:497
+#: admin/folderadmin.py:664
#, python-format
msgid "Successfully moved %(count)d files to clipboard."
-msgstr ""
+msgstr "%(count)d arquivo(s) movidos para a área de transferência com sucesso."
-#: admin/folderadmin.py:503
+#: admin/folderadmin.py:669
msgid "Move selected files to clipboard"
-msgstr ""
+msgstr "Mover os arquivos selecionados para a área de transferência"
-#: admin/folderadmin.py:537
+#: admin/folderadmin.py:709
#, python-format
msgid "Successfully disabled permissions for %(count)d files."
-msgstr ""
+msgstr "%(count)d arquivo(s) tiveram suas permissões desativadas com sucesso."
-#: admin/folderadmin.py:541
+#: admin/folderadmin.py:711
#, python-format
msgid "Successfully enabled permissions for %(count)d files."
-msgstr ""
+msgstr "%(count)d arquivo(s) tiveram suas permissões ativadas com sucesso."
-#: admin/folderadmin.py:550
+#: admin/folderadmin.py:719
msgid "Enable permissions for selected files"
-msgstr ""
+msgstr "Habilitar as permissões para os arquivos selecionados"
-#: admin/folderadmin.py:555
+#: admin/folderadmin.py:725
msgid "Disable permissions for selected files"
-msgstr ""
+msgstr "Desabilitar as permissões para os arquivos selecionados"
-#: admin/folderadmin.py:623
+#: admin/folderadmin.py:789
#, python-format
msgid "Successfully deleted %(count)d files and/or folders."
-msgstr ""
+msgstr "%(count)d arquivo(s) e/ou pasta(s) foram removidos com sucesso."
-#: admin/folderadmin.py:630
+#: admin/folderadmin.py:794
msgid "Cannot delete files and/or folders"
-msgstr ""
+msgstr "Não é possível remover arquivo(s) e/ou pasta(s)"
-#: admin/folderadmin.py:632
+#: admin/folderadmin.py:796
msgid "Are you sure?"
-msgstr ""
+msgstr "Você tem certeza?"
-#: admin/folderadmin.py:637
+#: admin/folderadmin.py:802
msgid "Delete files and/or folders"
-msgstr ""
+msgstr "Remover arquivo(s) e/ou pasta(s)"
-#: admin/folderadmin.py:656
+#: admin/folderadmin.py:823
msgid "Delete selected files and/or folders"
-msgstr ""
+msgstr "Remover arquivo(s) e/ou pasta(s) selecionados"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Pastas com os nomes %s s já existem no local selecionado"
-#: admin/folderadmin.py:771
+#: admin/folderadmin.py:934
#, python-format
msgid ""
"Successfully moved %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
+"%(count)d arquivo(s) e/ou pasta(s) foram movidos para a pasta "
+"'%(destination)s' com sucesso."
-#: admin/folderadmin.py:778 admin/folderadmin.py:780
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
msgid "Move files and/or folders"
-msgstr ""
+msgstr "Mover arquivo(s) e/ou pasta(s)"
-#: admin/folderadmin.py:797
+#: admin/folderadmin.py:959
msgid "Move selected files and/or folders"
-msgstr ""
+msgstr "Mover arquivo(s) e/ou pasta(s) selecionados"
-#: admin/folderadmin.py:854
+#: admin/folderadmin.py:1016
#, python-format
msgid "Successfully renamed %(count)d files."
-msgstr ""
+msgstr "%(count)d arquivo(s) foram renomeados com sucesso."
-#: admin/folderadmin.py:862 admin/folderadmin.py:864 admin/folderadmin.py:881
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
msgid "Rename files"
-msgstr ""
+msgstr "Renomear arquivos"
-#: admin/folderadmin.py:975
+#: admin/folderadmin.py:1137
#, python-format
msgid ""
"Successfully copied %(count)d files and/or folders to folder "
"'%(destination)s'."
msgstr ""
+"%(count)d arquivo(s) e/ou pasta(s) foram copiados para o pasta "
+"'%(destination)s' com sucesso."
-#: admin/folderadmin.py:989 admin/folderadmin.py:991
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
msgid "Copy files and/or folders"
-msgstr ""
+msgstr "Copiar arquivo(s) e/ou pasta(s)"
-#: admin/folderadmin.py:1010
+#: admin/folderadmin.py:1174
msgid "Copy selected files and/or folders"
-msgstr ""
+msgstr "Copiar arquivo(s) e/ou pasta(s) selecionados"
-#: admin/folderadmin.py:1105
+#: admin/folderadmin.py:1279
#, python-format
msgid "Successfully resized %(count)d images."
-msgstr ""
+msgstr "%(count)d imagem(ens) tiveram seu tamanho alterado com sucesso."
-#: admin/folderadmin.py:1113 admin/folderadmin.py:1115
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
msgid "Resize images"
-msgstr ""
+msgstr "Redimensionar imagens"
-#: admin/folderadmin.py:1133
+#: admin/folderadmin.py:1303
msgid "Resize selected images"
-msgstr ""
+msgstr "Redimensionar imagens selecionadas"
-#: admin/forms.py:26
+#: admin/forms.py:24
msgid "Suffix which will be appended to filenames of copied files."
-msgstr ""
+msgstr "Sufixo que será anexado aos nomes dos arquivos copiados"
-#: admin/forms.py:33
+#: admin/forms.py:31
#, python-format
msgid ""
"Suffix should be a valid, simple and lowercase filename part, like "
"\"%(valid)s\"."
msgstr ""
+"O sufixo precisa ser válido, simples e com letras minúsculas para o nome de "
+"um arquivo, como por exemplo: \"%(valid)s\"."
-#: admin/forms.py:54
+#: admin/forms.py:52
#, python-format
msgid "Unknown rename format value key \"%(key)s\"."
msgstr ""
+"A chave de valor \"%(key)s\" utilizada para renomear o arquivo é "
+"desconhecida."
-#: admin/forms.py:56
+#: admin/forms.py:54
#, python-format
msgid "Invalid rename format: %(error)s."
-msgstr ""
+msgstr "Formato inválido para renomear: %(error)s."
-#: admin/forms.py:62
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
msgid "thumbnail option"
-msgstr ""
+msgstr "opções de miniaturas"
-#: admin/forms.py:63
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
msgid "width"
-msgstr ""
+msgstr "largura"
-#: admin/forms.py:64
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
msgid "height"
-msgstr ""
+msgstr "altura"
-#: admin/forms.py:65
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
msgid "crop"
-msgstr ""
+msgstr "recortar"
-#: admin/forms.py:66
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
msgid "upscale"
-msgstr ""
+msgstr "aumentar"
-#: admin/forms.py:71
+#: admin/forms.py:79
msgid "Thumbnail option or resize parameters must be choosen."
msgstr ""
+"Escolher entre as opções de miniaturas ou parâmetros de redimensionamento."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Local do assunto"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Localização do tema principal da cena. Formato: \"x, y\"."
-#: admin/forms.py:73
-msgid "Resize parameters must be choosen."
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Formato de localização de assunto inválido."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "A localização do assunto está fora da imagem."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Sua entrada: \"{subject_location}\". "
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
msgstr ""
-#: admin/imageadmin.py:12
-msgid "Subject location"
-msgstr "Local de Assunto"
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
-#: admin/imageadmin.py:13
-msgid "Location of the main subject of the scene."
-msgstr "Localização do assunto principal da cena."
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Já existe uma pasta com esse nome."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Biblioteca de Mídia"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "alt text padrão"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "caption padrão"
-#: models/clipboardmodels.py:9 models/foldermodels.py:236
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "local do assunto"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "imagem"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "imagens"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
msgid "user"
msgstr "usuário"
-#: models/clipboardmodels.py:11 models/filemodels.py:287
+#: models/clipboardmodels.py:17 models/filemodels.py:157
msgid "files"
msgstr "arquivos"
-#: models/clipboardmodels.py:34 models/clipboardmodels.py:40
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
msgid "clipboard"
msgstr "Área de transferência"
-#: models/clipboardmodels.py:35
+#: models/clipboardmodels.py:25
msgid "clipboards"
-msgstr "Área de transferência"
+msgstr "áreas de transferência"
-#: models/clipboardmodels.py:39 models/filemodels.py:35
-#: models/filemodels.py:286
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
msgid "file"
msgstr "arquivo"
-#: models/clipboardmodels.py:44
+#: models/clipboardmodels.py:56
msgid "clipboard item"
msgstr "item da área de transferência"
-#: models/clipboardmodels.py:45
+#: models/clipboardmodels.py:57
msgid "clipboard items"
msgstr "itens da área de transferência"
-#: models/filemodels.py:33 templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
#: templates/admin/filer/folder/new_folder_form.html:4
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
msgid "folder"
msgstr "pasta"
-#: models/filemodels.py:36
+#: models/filemodels.py:81
msgid "file size"
-msgstr ""
+msgstr "tamanho do arquivo"
-#: models/filemodels.py:38
+#: models/filemodels.py:87
msgid "sha1"
-msgstr ""
+msgstr "sha1"
-#: models/filemodels.py:40
+#: models/filemodels.py:94
msgid "has all mandatory data"
-msgstr ""
+msgstr "possui todos os dados necessários"
-#: models/filemodels.py:42
+#: models/filemodels.py:100
msgid "original filename"
-msgstr ""
+msgstr "nome original do arquivo"
-#: models/filemodels.py:44 models/foldermodels.py:99
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
msgid "name"
msgstr "nome"
-#: models/filemodels.py:46
+#: models/filemodels.py:116
msgid "description"
msgstr "descrição"
-#: models/filemodels.py:50
+#: models/filemodels.py:125 models/foldermodels.py:108
msgid "owner"
msgstr "Proprietário"
-#: models/filemodels.py:52 models/foldermodels.py:105
+#: models/filemodels.py:129 models/foldermodels.py:116
msgid "uploaded at"
-msgstr ""
+msgstr "enviado em"
-#: models/filemodels.py:53 models/foldermodels.py:108
+#: models/filemodels.py:134 models/foldermodels.py:126
msgid "modified at"
-msgstr ""
+msgstr "modificado em"
-#: models/filemodels.py:57
+#: models/filemodels.py:140
msgid "Permissions disabled"
msgstr "Permissões desabilitadas"
-#: models/filemodels.py:58
-msgid "Disable any permission checking for this "
-msgstr "Desative qualquer verificação de permissão para este"
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Desative qualquer verificação de permissão para este arquivo. O arquivo "
+"estará acessível ao público para que qualquer possa acessar."
-#: models/foldermodels.py:107
-msgid "created at"
+#: models/foldermodels.py:94
+msgid "parent"
msgstr ""
-#: models/foldermodels.py:211
-#: templates/admin/filer/widgets/admin_folder.html:3
-#: templates/admin/filer/widgets/admin_folder.html:5
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "criado em"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Folder"
msgstr "Pasta"
-#: models/foldermodels.py:212
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
msgid "Folders"
msgstr "Pastas"
-#: models/foldermodels.py:227
+#: models/foldermodels.py:260
msgid "all items"
msgstr "todos os itens"
-#: models/foldermodels.py:228
+#: models/foldermodels.py:261
msgid "this item only"
msgstr "este item somente"
-#: models/foldermodels.py:229
+#: models/foldermodels.py:262
msgid "this item and all children"
-msgstr "este item e todas subjacentes"
+msgstr "este item e todos subjacentes"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "permitir"
-#: models/foldermodels.py:233
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "negar"
+
+#: models/foldermodels.py:280
msgid "type"
msgstr "tipo"
-#: models/foldermodels.py:239
+#: models/foldermodels.py:297
msgid "group"
msgstr "grupo"
-#: models/foldermodels.py:240
+#: models/foldermodels.py:304
msgid "everybody"
msgstr "todos"
-#: models/foldermodels.py:242
-msgid "can edit"
-msgstr "pode editar"
-
-#: models/foldermodels.py:243
+#: models/foldermodels.py:309
msgid "can read"
msgstr "pode ler"
-#: models/foldermodels.py:244
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "pode editar"
+
+#: models/foldermodels.py:325
msgid "can add children"
msgstr "pode adicionar filhos"
-#: models/foldermodels.py:273
+#: models/foldermodels.py:333
msgid "folder permission"
msgstr "permissão de pasta"
-#: models/foldermodels.py:274
+#: models/foldermodels.py:334
msgid "folder permissions"
msgstr "permissões de pasta"
-#: models/imagemodels.py:39
-msgid "date taken"
-msgstr "data de tomada"
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
-#: models/imagemodels.py:42
-msgid "default alt text"
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
msgstr ""
-#: models/imagemodels.py:43
-msgid "default caption"
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
msgstr ""
-#: models/imagemodels.py:45 templates/image_filer/image.html:6
-msgid "author"
-msgstr "autor"
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
-#: models/imagemodels.py:47
-msgid "must always publish author credit"
+#: models/foldermodels.py:360
+msgid "All Folders"
msgstr ""
-#: models/imagemodels.py:48
-msgid "must always publish copyright"
+#: models/foldermodels.py:362
+msgid "Logical Path"
msgstr ""
-#: models/imagemodels.py:50
-msgid "subject location"
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
msgstr ""
-#: models/imagemodels.py:200
-msgid "image"
-msgstr "imagem"
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
-#: models/imagemodels.py:201
-msgid "images"
-msgstr "imagens"
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
-#: models/virtualitems.py:45
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "unfiled files"
-msgstr "arquivos unfiled"
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
-#: models/virtualitems.py:59
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "data de tomada"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "autor"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "necessário sempre publicar os créditos do autor"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "necessário sempre publicar os direitos autorais"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "largura em pixel."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "altura em pixel."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "opções de miniaturas"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Uploads não classificados"
+
+#: models/virtualitems.py:73
msgid "files with missing metadata"
msgstr "arquivos com falta de metadados"
-#: models/virtualitems.py:73 templates/admin/filer/breadcrumbs.html:6
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:10
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
msgid "root"
msgstr "raiz"
-#: templates/admin/filer/actions.html:4
-msgid "Run the selected action"
+#: settings.py:273
+msgid "Show table view"
msgstr ""
-#: templates/admin/filer/actions.html:4
-msgid "Go"
+#: settings.py:278
+msgid "Show thumbnail view"
msgstr ""
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Executar a ação selecionada"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Avançar"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
msgid "Click here to select the objects across all pages"
-msgstr ""
+msgstr "Clique aqui para selecionar os objetos em todas as páginas"
-#: templates/admin/filer/actions.html:11
+#: templates/admin/filer/actions.html:14
#, python-format
msgid "Select all %(total_count)s files and/or folders"
-msgstr ""
+msgstr "Selecionar todos os %(total_count)s arquivo(s) e/ou pasta(s)"
-#: templates/admin/filer/actions.html:13
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
msgid "Clear selection"
-msgstr ""
+msgstr "Limpar a seleção"
#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
msgid "Go back to admin homepage"
-msgstr "Volte à página inicial de administração"
+msgstr "Voltar à página inicial de administração"
#: templates/admin/filer/breadcrumbs.html:4
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
msgid "Home"
msgstr "Início"
#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
msgid "Go back to Filer app"
-msgstr "Volte para Filer app"
-
-#: templates/admin/filer/breadcrumbs.html:5
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/image_filer/image_export_form.html:8
-msgid "Filer"
-msgstr "Filer"
+msgstr "Voltar para Filer app"
#: templates/admin/filer/breadcrumbs.html:6
-#: templates/image_filer/image_export_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:35
msgid "Go back to root folder"
msgstr "Volte à pasta raiz"
#: templates/admin/filer/breadcrumbs.html:8
-#: templates/admin/filer/breadcrumbs.html:11
-#: templates/admin/filer/folder/change_form.html:11
-#: templates/image_filer/image_export_form.html:12
-#: templates/image_filer/image_export_form.html:14
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
#, python-format
msgid "Go back to '%(folder_name)s' folder"
msgstr "Volte para a pasta '%(folder_name)s'"
-#: templates/admin/filer/change_form.html:28
-msgid "duplicates"
-msgstr "duplicatas"
-
-#: templates/admin/filer/delete_confirmation.html:13
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:21
-#, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the "
-"following protected related objects:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:29
-#, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-
-#: templates/admin/filer/delete_confirmation.html:34
-#: templates/admin/filer/delete_selected_files_confirmation.html:45
-msgid "Yes, I'm sure"
-msgstr ""
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Duplicados"
#: templates/admin/filer/delete_selected_files_confirmation.html:11
msgid ""
@@ -486,399 +642,633 @@ msgid ""
"objects, but your account doesn't have permission to delete the following "
"types of objects:"
msgstr ""
+"Remover os arquivo(s) e/ou pasta(s) selecionados resultará na remoção de "
+"objetos relacionados, mas sua conta não tem permissão para remover os "
+"seguintes tipos de objetos:"
#: templates/admin/filer/delete_selected_files_confirmation.html:19
msgid ""
"Deleting the selected files and/or folders would require deleting the "
"following protected related objects:"
msgstr ""
+"Remover os arquivo(s) e/ou pasta(s) selecionados, requer remover os seguites "
+"objetos protegidos relacionados:"
#: templates/admin/filer/delete_selected_files_confirmation.html:27
msgid ""
"Are you sure you want to delete the selected files and/or folders? All of "
"the following objects and their related items will be deleted:"
msgstr ""
+"Você tem certeza que deseja remover os arquivo(s) e/ou pasta(s) "
+"selecionados? Todos os seguintes objetos e itens relacionados serão "
+"removidos: "
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/admin/filer/folder/change_form.html:8
-#: templates/admin/filer/folder/change_form.html:9
-#: templates/admin/filer/folder/directory_listing.html:74
-#: templates/image_filer/image_export_form.html:7
-#: templates/image_filer/image_export_form.html:8
-#: templates/image_filer/image_export_form.html:16
-msgid "Go back to"
-msgstr "Volte para"
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Não, me leve de volta"
-#: templates/admin/filer/folder/change_form.html:7
-#: templates/image_filer/image_export_form.html:7
-msgid "admin homepage"
-msgstr "homepage admin"
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Sim, eu tenho certeza"
-#: templates/admin/filer/folder/change_form.html:22
-#: templates/admin/filer/image/change_form.html:9
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
msgid "History"
msgstr "História"
+#: templates/admin/filer/file/change_form.html:37
#: templates/admin/filer/folder/change_form.html:23
-#: templates/admin/filer/image/change_form.html:10
+#: templates/admin/filer/image/change_form.html:37
msgid "View on site"
-msgstr "Veja no site"
+msgstr "Ver no site"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Voltar para"
-#: templates/admin/filer/folder/change_form.html:35
-#: templates/admin/filer/folder/directory_listing.html:75
-#: templates/admin/filer/folder/directory_listing.html:85
-#: templates/admin/filer/folder/directory_table.html:23
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "página inicial de administração"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
msgid "Folder Icon"
msgstr "Ícone da Pasta"
-#: templates/admin/filer/folder/choose_copy_destination.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:23
msgid ""
"Your account doesn't have permissions to copy all of the selected files and/"
"or folders."
msgstr ""
+"Sua conta não possui permissão para copiar todos os arquivo(s) e/ou pasta(s) "
+"selecionados."
-#: templates/admin/filer/folder/choose_copy_destination.html:15
-#: templates/admin/filer/folder/choose_move_destination.html:15
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Me leve de volta"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
msgid "There are no destination folders available."
-msgstr ""
+msgstr "Não existe pasta de destino disponível."
-#: templates/admin/filer/folder/choose_copy_destination.html:18
+#: templates/admin/filer/folder/choose_copy_destination.html:35
msgid "There are no files and/or folders available to copy."
-msgstr ""
+msgstr "Não existem arquivo(s) e/ou pasta(s) disponíveis para copiar."
-#: templates/admin/filer/folder/choose_copy_destination.html:20
+#: templates/admin/filer/folder/choose_copy_destination.html:40
msgid ""
"The following files and/or folders will be copied to a destination folder "
"(retaining their tree structure):"
msgstr ""
+"Os arquivo(s) e/ou pasta(s) serão copiados para a pasta de destino (mantendo "
+"a estrutura de diretórios):"
-#: templates/admin/filer/folder/choose_copy_destination.html:32
-#: templates/admin/filer/folder/choose_move_destination.html:32
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
msgid "Destination folder:"
-msgstr ""
+msgstr "Pasta de destino:"
-#: templates/admin/filer/folder/choose_copy_destination.html:39
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
msgid "Copy"
-msgstr ""
+msgstr "Copiar"
-#: templates/admin/filer/folder/choose_images_resize_options.html:12
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Não é permitido copiar arquivos para a mesma pasta"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
msgid ""
"Your account doesn't have permissions to resize all of the selected images."
msgstr ""
+"Sua conta não possui permissão para redimensionar todas as imagens "
+"selecionadas."
-#: templates/admin/filer/folder/choose_images_resize_options.html:15
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
msgid "There are no images available to resize."
-msgstr ""
+msgstr "Não existem imagens disponíveis para redimensionar."
-#: templates/admin/filer/folder/choose_images_resize_options.html:17
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
msgid "The following images will be resized:"
-msgstr ""
-
-#: templates/admin/filer/folder/choose_images_resize_options.html:30
-msgid "Choose an existing thumbnail option or enter resize parameters:"
-msgstr ""
+msgstr "As seguintes imagens serão redimensionadas:"
#: templates/admin/filer/folder/choose_images_resize_options.html:32
-msgid "Choose resize parameters:"
+msgid "Choose an existing thumbnail option or enter resize parameters:"
msgstr ""
+"Selecionar uma opção de miniatura ou digitar os parâmetros de "
+"redimensionamento:"
-#: templates/admin/filer/folder/choose_images_resize_options.html:35
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
msgid ""
"Warning: Images will be resized in-place and originals will be lost. Maybe "
"first make a copy of them to retain the originals."
msgstr ""
+"Cuidado: as imagens serão redimensionadas no mesmo local e os originais "
+"serão perdidos. Uma sugestão seria fazer uma cópia para guardar os originais."
-#: templates/admin/filer/folder/choose_images_resize_options.html:36
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
msgid "Resize"
-msgstr ""
+msgstr "Redimensionar"
-#: templates/admin/filer/folder/choose_move_destination.html:12
+#: templates/admin/filer/folder/choose_move_destination.html:35
msgid ""
"Your account doesn't have permissions to move all of the selected files and/"
"or folders."
msgstr ""
+"Sua conta não possui permissão para mover todos os arquivo(s) e/ou pasta(s) "
+"selecionados."
-#: templates/admin/filer/folder/choose_move_destination.html:18
+#: templates/admin/filer/folder/choose_move_destination.html:47
msgid "There are no files and/or folders available to move."
-msgstr ""
+msgstr "Não existem arquivo(s) e/ou pasta(s) disponíveis para mover."
-#: templates/admin/filer/folder/choose_move_destination.html:20
+#: templates/admin/filer/folder/choose_move_destination.html:52
msgid ""
"The following files and/or folders will be moved to a destination folder "
"(retaining their tree structure):"
msgstr ""
+"Os arquivo(s) e/ou pasta(s) serão movidos para a pasta de destino (mantendo "
+"a estrutura de diretórios):"
-#: templates/admin/filer/folder/choose_move_destination.html:38
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
msgid "Move"
-msgstr ""
+msgstr "Mover"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Não é permitido mover arquivos na mesma pasta"
-#: templates/admin/filer/folder/choose_rename_format.html:12
+#: templates/admin/filer/folder/choose_rename_format.html:15
msgid ""
"Your account doesn't have permissions to rename all of the selected files."
msgstr ""
+"Sua conta não possui permissão para renomear todos os arquivos selecionados."
-#: templates/admin/filer/folder/choose_rename_format.html:15
+#: templates/admin/filer/folder/choose_rename_format.html:18
msgid "There are no files available to rename."
-msgstr ""
+msgstr "Não existem arquivos disponíveis para renomear."
-#: templates/admin/filer/folder/choose_rename_format.html:17
+#: templates/admin/filer/folder/choose_rename_format.html:20
msgid ""
"The following files will be renamed (they will stay in their folders and "
"keep original filename, only displayed filename will be changed):"
msgstr ""
+"Os seguintes arquivos serão renomeados (estes arquivos serão mantidos em "
+"suas pastas e os nomes originais serão mantidos, apenas o nome de "
+"apresentação será alterado):"
-#: templates/admin/filer/folder/choose_rename_format.html:54
+#: templates/admin/filer/folder/choose_rename_format.html:59
msgid "Rename"
-msgstr ""
+msgstr "Renomear"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Volte para a pasta pai"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Alterar os detalhes da pasta atual"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Alterar"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Clique aqui para pesquisar pela frase inserida"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Pesquisar"
-#: templates/admin/filer/folder/directory_listing.html:66
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Fechar"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Limite"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Marque para limitar a pesquisa na pasta atual"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Limitar a pesquisa na pasta atual"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Remover"
+
+#: templates/admin/filer/folder/directory_listing.html:203
msgid "Adds a new Folder"
msgstr "Adiciona uma nova pasta"
-#: templates/admin/filer/folder/directory_listing.html:66
-#: templates/image_filer/include/export_dialog.html:34
+#: templates/admin/filer/folder/directory_listing.html:206
msgid "New Folder"
msgstr "Nova Pasta"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "upload files"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Enviar arquivos"
-#: templates/admin/filer/folder/directory_listing.html:67
-msgid "Upload"
-msgstr ""
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Você precisa selecionar a pasta primeiro"
-#: templates/admin/filer/folder/directory_listing.html:74
-msgid "Go back to the parent folder"
-msgstr "Volte para a pasta pai"
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Nome"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Proprietário"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Tamanho"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Ação"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
#, python-format
-msgid "1 folder"
+msgid "Change '%(item_label)s' folder details"
+msgstr "Alterar os detalhes da pasta '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
msgid_plural "%(counter)s folders"
msgstr[0] "%(counter)s pasta"
msgstr[1] "%(counter)s pastas"
+msgstr[2] "%(counter)s pastas"
-#: templates/admin/filer/folder/directory_listing.html:76
-#: templates/admin/filer/folder/directory_table.html:29
-#: templates/admin/filer/tools/search_form.html:19
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
#, python-format
-msgid "1 file"
+msgid "%(counter)s file"
msgid_plural "%(counter)s files"
msgstr[0] "%(counter)s arquivo"
msgstr[1] "%(counter)s arquivos"
-
-#: templates/admin/filer/folder/directory_listing.html:80
-msgid "Change current folder details"
-msgstr "Alterar os detalhes da pasta atual"
-
-#: templates/admin/filer/folder/directory_listing.html:80
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:43
-msgid "Change"
-msgstr "Alterar"
-
-#: templates/admin/filer/folder/directory_table.html:13
-msgid "Name"
-msgstr "Nome"
-
-#: templates/admin/filer/folder/directory_table.html:23
-#: templates/admin/filer/folder/directory_table.html:27
-#: templates/admin/filer/folder/directory_table.html:29
-#, python-format
-msgid "Change '%(item_label)s' folder details"
-msgstr "Alterar os detalhes da pasta '%(item_label)s'"
-
-#: templates/admin/filer/folder/directory_table.html:30
-#: templates/admin/filer/folder/directory_table.html:45
-msgid "Owner"
-msgstr "Proprietário"
-
-#: templates/admin/filer/folder/directory_table.html:37
+msgstr[2] "%(counter)s arquivos"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Alterar detalhes da pasta"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Remover pasta"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
msgid "Select this file"
-msgstr "Selecione este arquivo"
+msgstr "Selecionar este arquivo"
-#: templates/admin/filer/folder/directory_table.html:39
-#: templates/admin/filer/folder/directory_table.html:43
-#: templates/admin/filer/folder/directory_table.html:44
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
#, python-format
msgid "Change '%(item_label)s' details"
msgstr "Alterar os detalhes de '%(item_label)s'"
-#: templates/admin/filer/folder/directory_table.html:42
-#, python-format
-msgid "Delete '%(item_label)s'"
-msgstr ""
-
-#: templates/admin/filer/folder/directory_table.html:42
-msgid "Delete"
-msgstr ""
-
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "Permissions"
msgstr "Permissões"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "disabled"
msgstr "desabilitado"
-#: templates/admin/filer/folder/directory_table.html:46
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
msgid "enabled"
msgstr "habilitado"
-#: templates/admin/filer/folder/directory_table.html:50
-msgid "Move to clipboard"
-msgstr "Mover para a área de transferência"
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Mover os arquivos selecionados para a área de transferência"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "URL Canônico '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Baixar '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Remover arquivo"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Arraste os arquivos aqui ou use o botão \"Enviar arquivos\""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Arraste seu arquivo para enviar em:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Upload"
-#: templates/admin/filer/folder/directory_table.html:58
-msgid "there are no files or subfolders"
-msgstr "não existem arquivos ou subpastas"
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "Cancelar"
-#: templates/admin/filer/folder/directory_table.html:65
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Envio realizado com sucesso!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Envio cancelado!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
msgid "previous"
-msgstr ""
+msgstr "anterior"
-#: templates/admin/filer/folder/directory_table.html:69
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
#, python-format
-msgid ""
-"\n"
-" Page %(number)s of %(num_pages)s.\n"
-" "
-msgstr ""
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Página %(number)s de %(num_pages)s."
-#: templates/admin/filer/folder/directory_table.html:75
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
msgid "next"
+msgstr "próximo"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Selecione todos %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
msgstr ""
#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
msgid "Add new"
msgstr "Adicionar novo"
-#: templates/admin/filer/folder/new_folder_form.html:13
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Administração Django"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Favor corrigir o erro abaixo."
+msgstr[1] "Favor corrigir os erros abaixo."
+msgstr[2] "Favor corrigir os erros abaixo."
-#: templates/admin/filer/folder/new_folder_form.html:28
+#: templates/admin/filer/folder/new_folder_form.html:30
msgid "Save"
msgstr "Salvar"
-#: templates/admin/filer/image/change_form.html:21
-msgid "Full size preview"
-msgstr "visualização de tamanho completo"
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:8
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Search"
-msgstr "Pesquisa"
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
-#: templates/admin/filer/tools/search_form.html:13
-msgid "Enter your search phrase here"
-msgstr "Digite sua frase de busca aqui"
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Área de transferência"
-#: templates/admin/filer/tools/search_form.html:14
-msgid "Click here to"
-msgstr "Clique aqui para"
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Colar todos os itens aqui"
-#: templates/admin/filer/tools/search_form.html:14
-msgid "run search for entered phrase"
-msgstr "executar pesquisa para a frase inscrita"
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Mova todos os arquivos da área de transferência para"
-#: templates/admin/filer/tools/search_form.html:15
-msgid "Check it to"
-msgstr "Verifique se a"
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Esvaziar área de transferência"
-#: templates/admin/filer/tools/search_form.html:15
-#: templates/admin/filer/tools/search_form.html:16
-msgid "limit the search to current folder"
-msgstr "limitar a pesquisa a pasta atual"
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "a área de transferência está vazia"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "Falha no upload"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Tipo"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Tamanho do arquivo"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Modificado"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Criado"
+
+#: templates/admin/filer/tools/search_form.html:5
msgid "found"
msgstr "encontrados"
-#: templates/admin/filer/tools/search_form.html:18
+#: templates/admin/filer/tools/search_form.html:5
msgid "and"
msgstr "e"
-#: templates/admin/filer/tools/search_form.html:19
+#: templates/admin/filer/tools/search_form.html:7
msgid "cancel search"
msgstr "cancelar a busca de"
-#: templates/admin/filer/tools/upload_button_js.html:24
-#: templates/admin/filer/widgets/admin_file.html:7
-#: templates/admin/filer/widgets/admin_file.html:8
-msgid "file missing"
-msgstr "arquivo faltando"
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Limpar"
-#: templates/admin/filer/tools/clipboard/clipboard.html:7
-msgid "Clipboard"
-msgstr "Área de transferência"
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "ou arraste seu arquivo aqui"
-#: templates/admin/filer/tools/clipboard/clipboard.html:19
-msgid "Paste all items here"
-msgstr "Colar todos os itens aqui"
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "nenhum arquivo selecionado"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "discard"
-msgstr "descartar"
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Pesquisar"
-#: templates/admin/filer/tools/clipboard/clipboard.html:26
-msgid "Move all clipboard files to"
-msgstr "Mova todos os arquivos da área de transferência para"
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Alterar Arquivo"
-#: templates/admin/filer/tools/clipboard/clipboard.html:43
-msgid "the clipboard is empty"
-msgstr "a área de transferência está vazia"
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
-#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:11
-msgid "upload failed"
-msgstr "Falha no upload"
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:11
-msgid "no file selected"
-msgstr "nenhum arquivo selecionado"
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:14
-#: templates/admin/filer/widgets/admin_file.html:15
-#: templates/admin/filer/widgets/admin_folder.html:7
-#: templates/admin/filer/widgets/admin_folder.html:8
-msgid "Lookup"
-msgstr "Pesquisa"
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
-#: templates/admin/filer/widgets/admin_file.html:17
-#: templates/admin/filer/widgets/admin_folder.html:10
-msgid "Clear"
-msgstr "Limpar"
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
-#: templates/admin/filer/widgets/admin_folder.html:5
-msgid "none selected"
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
msgstr ""
-#: templates/image_filer/folder.html:3
-#, python-format
-msgid "Folder '%(folder_label)s' files"
-msgstr "Arquivos da pasta '%(folder_label)s'"
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
-#: templates/image_filer/folder.html:6
-msgid "File name"
-msgstr "Nome do arquivo"
+#~ msgid "none selected"
+#~ msgstr "none selected"
-#: templates/image_filer/image_export_form.html:17
-msgid "export"
-msgstr "exportação"
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
-#: templates/image_filer/image_export_form.html:27
-msgid "download image"
-msgstr "download da imagem"
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
-#: templates/image_filer/include/export_dialog.html:13
-msgid "Folder name already taken."
-msgstr "Nome da pasta já existe."
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
-#: templates/image_filer/include/export_dialog.html:15
-msgid "Submit"
-msgstr "Enviar"
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/ru/LC_MESSAGES/django.mo b/filer/locale/ru/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..05996b220
Binary files /dev/null and b/filer/locale/ru/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/ru/LC_MESSAGES/django.po b/filer/locale/ru/LC_MESSAGES/django.po
new file mode 100644
index 000000000..89f63fdbb
--- /dev/null
+++ b/filer/locale/ru/LC_MESSAGES/django.po
@@ -0,0 +1,1263 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Alexander Naydenko , 2020
+# Oleg Fish , 2017
+# Pavel , 2012
+# Pavel , 2012
+# Vladimir Puzakov , 2019
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Alexander Naydenko , 2020\n"
+"Language-Team: Russian (http://app.transifex.com/divio/django-filer/language/"
+"ru/)\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
+"(n%100>=11 && n%100<=14)? 2 : 3);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Дополнительно"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "канонический URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Для выполнения действий нужно выбрать хотя бы один объект. Не произведено "
+"никаких изменений."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s выбран"
+msgstr[1] "%(total_count)s выбрано"
+msgstr[2] "Все %(total_count)s выбраны"
+msgstr[3] "Все %(total_count)s выбраны"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Содержимое %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 из %(cnt)s выбрано"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Действие не выбрано."
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "Успешно перемещено %(count)d файлов в буфер обмена."
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Переместить выбранные файлы в буфер обмена"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Разрешения успешно отключены для %(count)d файлов."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Разрешения успешно применены для %(count)d файлов."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Включить разрешения для выбранных файлов"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Отключить разрешения для выбранных файлов"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "Успешно удалено %(count)d файлов/папок."
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Невозможно удалить файлы/папки"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Вы уверены?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Удалить файлы/папки"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Удалить выбранные файлы/папки"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Папки с именами %s уже существуют в указанном месте"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "Успешно перемещено %(count)d файлов/папок в папку '%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Переместить файлы/папки"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Переместить выбранные файлы/папки"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "Успешно переименовано %(count)d файлов."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Переименовать файлы"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "Успешно скопировано %(count)d файлов/папок в папку '%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Скопировать файлы/папки"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Скопировать выбранные файлы/папки"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Успешно изменен размер %(count)d изображений."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Изменить размер изображений"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Изменить размер выбранных изображений"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Окончание, которое будет добавлено к именам скопированных файлов."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Окончание должно быть правильной, простой и в нижнем регистре частью имени "
+"файла, например \"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Неизвестный ключ форматирования \"%(key)s\"."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Неверный формат переименования: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "опция миниатюры"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "ширина"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "высота"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "обрезать"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "увеличивать"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Опция миниатюры или параметры изменения размера должны быть указаны."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Расположение объекта"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Расположение главного объекта сцены. Формат: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Неверный формат расположения объекта."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Расположение объекта указано за пределами изображения."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Вы ввели: \"{subject_location}\". "
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Папка с таким именем уже существует"
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Медиа-библиотека"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "альтернативный текст"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "описание"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "расположение объекта"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "изображение"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "изображения"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "пользователь"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "файлы"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "буфер обмена"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "буферы обмена"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "файл"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "элемент буфера обмена"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "элементы буфера обмена"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "папка"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "размер файла"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "это обязательные данные"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "оригинальное имя файла"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "имя"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "описание"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "владелец"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "загружено"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "изменено"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Разрешения отключены"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Отменить все проверки разрешений для этого файла. Файл будет доступен "
+"публично для каждого."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "создан"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Папка"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Папки"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "все элементы"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "только этот элемент"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "этот элемент и потомки"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "разрешить"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "запретить"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "тип"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "группа"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "все"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "могут читать"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "могут редактировать"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "могут добавлять потомков"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "разрешение папки"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "разрешения папки"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "дата создания"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "автор"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "необходимо всегда указывать авторство"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "необходимо всегда указывать copyright"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "ширина в пикселях."
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "высота в пикселях."
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "опции миниатюры"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Несортированные загрузки"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "файлы с отсутсвующими метаданными"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "корень"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Выполнить выбранное действие"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Выполнить"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Нажмите здесь, чтобы выбрать объекты на всех страницах"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Выбрать все %(total_count)s файлов/папок"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Очистить выбор"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Вернуться на главную страницу администрирования"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Домой"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Вернуться на главную Filer'а"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Вернуться в корневую папку"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Вернуться в папку \"%(folder_name)s\""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Дубликаты"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Удаление выбранных файлов/папок приведет к удалению связанных объектов, но у "
+"вас нет прав удалять следующие объекты:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Удаление выбранных файлов/папок потребует удаления следующих защищенных "
+"связанных объектов:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Вы уверены, что хотите удалить выбранные файлы/папки? Следующие объекты "
+"вместе со связанными объектами будут удалены:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Нет, пустите меня обратно"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Да, я уверен"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "История"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Посмотреть на сайте"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Вернуться к"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "главная страница администрирования"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Иконка папки"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr "У вас нет прав на копирование выбранных файлов/папок"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Пустите меня обратно"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Нет доступной целевой папки."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Нет файлов для копирования."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Эти файлы/папки будут скопированы в целевую папку (с сохранением "
+"иерархичности):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Целевая папка:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Копировать"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Копирование файлов в ту же самую папку запрещено"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "Вы не имеете прав для изменения размеров выбранных изображений."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Нет доступных изображений для изменения размеров."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "У этих изображений будет изменен размер:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "Выберите опцию миниатюры или введите параметры изменения размеров:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Внимание: изображения будут изменены в размерах с заменой оригиналов. "
+"Возможно, лучше будет сперва сделать копии."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Изменить размеры"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr "Вы не имеете прав для перемещения выбранных файлов/папок."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Нет файлов/папок для перемещения."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Следующие файлы/папки будут перемещены в целевую папку (сохраняя "
+"иерархичность):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Переместить"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Перемещение файлов в ту же самую папку запрещено"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "У вас нет прав на переименование выбранных файлов."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Нет файлов для переименовывания."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"Эти файлы будут переименованы (они остануться в их папках и сохранят имена "
+"оригинальных файлов, только отображаемое имя измениться):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Переименовать"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Возвратиться к родительской папке"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Изменить текущую папку"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Изменить"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Нажмите здесь для поиска по введенной фразе"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Поиск"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Закрыть"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Ограничить"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Отметьте, чтобы ограничить поиск текущей папкой"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Ограничить поиск текущей папкой"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Удалить"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Добавляет новую папку"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Новая папка"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Загрузить файлы"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Сначала надо выбрать папку"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Имя"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Владелец"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Размер"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Действие"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Изменить данные папки \"%(item_label)s\""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s папка"
+msgstr[1] "%(counter)s папки"
+msgstr[2] "%(counter)s папок"
+msgstr[3] "%(counter)s папок"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s файл"
+msgstr[1] "%(counter)s файла"
+msgstr[2] "%(counter)s файлов"
+msgstr[3] "%(counter)s файлов"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Изменить свойства папки"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Удалить папку"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Выбрать этот файл"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Изменить данные \"%(item_label)s\""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Разрешения"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "отключены"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "включены"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Переместить выбранные файлы в буфер обмена"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "Канонический URL '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Скачать '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Удалить файл"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "\"Скиньте\" сюда файлы или используйте кнопку \"Загрузить файлы\""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "\"Скиньте\" ваши файлы сюда для загрузки в:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Загрузить"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "отмена"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Загрузка успешно завершена!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Загрузка отменена!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "предыдущая"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Страница %(number)s из %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "следующая"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Выбрать все %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Добавить новую"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Система администрирования Django"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Пожалуйста, исправьте указанную ошибку."
+msgstr[1] "Пожалуйста, исправьте указанные ошибки."
+msgstr[2] "Пожалуйста, исправьте указанные ошибки."
+msgstr[3] "Пожалуйста, исправьте указанные ошибки."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Сохранить"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Буфер обмена"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Вставить все элементы здесь"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Переместить элементы буфера обмена в"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Пустой буфер обмена"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "буфер обмена пуст"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "загрузка не удалась"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Тип"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Размер файла"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Изменен"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Создан"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "найдено"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "и"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "закрыть поиск"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Очистить"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "или \"скиньте\" ваш файл сюда"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "файл не выбран"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Выбрать"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Выбрать файл"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+#~ msgstr[3] "15c0f2d28d6dab1af1f6d94906beb627_pl_3"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/sk/LC_MESSAGES/django.mo b/filer/locale/sk/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..439890714
Binary files /dev/null and b/filer/locale/sk/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/sk/LC_MESSAGES/django.po b/filer/locale/sk/LC_MESSAGES/django.po
new file mode 100644
index 000000000..5edca14bd
--- /dev/null
+++ b/filer/locale/sk/LC_MESSAGES/django.po
@@ -0,0 +1,1235 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Slovak (http://app.transifex.com/divio/django-filer/language/"
+"sk/)\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n "
+">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+#~ msgstr[2] "15c0f2d28d6dab1af1f6d94906beb627_pl_2"
+#~ msgstr[3] "15c0f2d28d6dab1af1f6d94906beb627_pl_3"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/tr/LC_MESSAGES/django.mo b/filer/locale/tr/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..d1049348f
Binary files /dev/null and b/filer/locale/tr/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/tr/LC_MESSAGES/django.po b/filer/locale/tr/LC_MESSAGES/django.po
new file mode 100644
index 000000000..2437c3922
--- /dev/null
+++ b/filer/locale/tr/LC_MESSAGES/django.po
@@ -0,0 +1,1230 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Cihad GÜNDOĞDU , 2013,2015-2016
+# Cihad GÜNDOĞDU , 2013
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Cihad GÜNDOĞDU , 2013,2015-2016\n"
+"Language-Team: Turkish (http://app.transifex.com/divio/django-filer/language/"
+"tr/)\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Gelişmiş"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "standart URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "%(cnt)s 0 adet seçildi"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "İşlem seçilmedi"
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "%(count)d adet dosya arabelleğe taşındı"
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Seçili dosyalar ara belleğe alındı"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "%(count)d adet dosyanın yetkilendirmesi pasif hale getirildi."
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "%(count)d adet dosyanın yetkilendirmesi pasif hale getirildi."
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Seçili dosyalar için yetkilendirmeyi aktif yap"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Seçili dosyalar için yetkilendirmeyi pasif yap"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "%(count)d dosya veya klasörler başarıyla silindi"
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Seçili dosya veya klasörler silinemedi"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Eminmisiniz?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Dosya veya klasörleri sil"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Seçili dosya veya klasörleri sil"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "%s isimli klasörler seçili hedefte var."
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"%(count)d adet dosya/klasör başarıyla '%(destination)s' klasörüne taşındı"
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Dosya veya klasörleri taşı"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Seçili dosya veya klasörleri taşı"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "%(count)d adet dosya yeniden adlandırıldı."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Dosyaları yeniden adlandır"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"%(count)d adet dosya veya klasör '%(destination)s' klasörüne kopyalandı"
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Dosya veya klasörleri kopyala"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Seçili dosya veya klasörleri kopyala"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "%(count)d adet resim başarıyla yeniden boyutlandırıldı."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Resimleri yeniden boyutlandır"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Seçili resimleri yeniden boyutlandır"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "genişlil"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "yükseklik"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "kırp"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Bu isimde dizin zaten var"
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "kullanıcı"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "dosyalar"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "ara bellek"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "ara bellekler"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "dosya"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "arabellek nesnesi"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "klasör"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "dosya boyutu"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "orjinal dosya adı"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "isim"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "açıklama"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "sahib"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "yüklendi"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "düzenlendi"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Yetkiler pasifleştirildi"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "tüm elemanlar"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "sadece bu eleman"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "bu eleman ve alt elemanlar"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "izin ver"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "engelle"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "tip"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "grup"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "herkes"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "okuyabilir"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "düzenleyebilir"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "alt eleman ekleyebilir"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "dizin yetki"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "dizin yetkileri"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "kök"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Seçili aksiyonu çalışıtır"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Git"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Yeniden adlandır"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Ara"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Geçerli klasörün aramalarını sınırla"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Sil"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Yeni Klasör Ekle"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Yeni Klasör"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Dosyaları Yükle"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Önce bir klasör seçmelisin"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "İsim"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Sahip"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Boyut"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "İşlem"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "'%(item_label)s' klasör detaylarını değiştir"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Klasör detaylarını değiştir"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Klasörü kaldır"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Bu dosyayı seç"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "'%(item_label)s' detaylarını değiştir"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Yetkiler"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "pasif"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "aktif"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Seçili dosyalar ara belleğe alındı"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Dosyayı kaldır"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Buraya dosya yüklemek için \"Dosyaları Yükle\" düğmesine tıklayın"
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Yüklenecek dosyayı buraya bırakın"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Yükle"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "iptal"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Yükleme Başarılı"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Yükleme iptal!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "önceki"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Sayfa %(number)s / %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "sonraki"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "%(total_count)s Tümünü seç"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Yeni ekle"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Kaydet"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Ara bellek"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Tüm elemanları buraya yapıştır"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Arabellekteki tüm dosyaları kopyala"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Bellek boş"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "Arabellek boş"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "Yükleme başarısız"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Tip"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Dosya-Boyut"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Düzenlendi"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Oluşturuldu"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "bulundu"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "ve"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "arama iptal"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Temizle"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "Seçili dosya yok"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Dosya Seç"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+#~ msgstr[1] "15c0f2d28d6dab1af1f6d94906beb627_pl_1"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/vi_VN/LC_MESSAGES/django.mo b/filer/locale/vi_VN/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..c784f9621
Binary files /dev/null and b/filer/locale/vi_VN/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/vi_VN/LC_MESSAGES/django.po b/filer/locale/vi_VN/LC_MESSAGES/django.po
new file mode 100644
index 000000000..24ac1a3a7
--- /dev/null
+++ b/filer/locale/vi_VN/LC_MESSAGES/django.po
@@ -0,0 +1,1252 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Duong Vu Hong , 2021
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Duong Vu Hong , 2021\n"
+"Language-Team: Vietnamese (Viet Nam) (http://app.transifex.com/divio/django-"
+"filer/language/vi_VN/)\n"
+"Language: vi_VN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr "Nâng Cao"
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr "URL hợp chuẩn"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Những item được chọn để thực hiện hành động trên đó. Không có item nào bị "
+"thay đổi."
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "Tất cả %(total_count)s được chọn"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "Thư mục liệt kê cho %(folder_name)s"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 trên %(cnt)sđược chọn"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "Không có hành động được chọn"
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "Di chuyển %(count)dtệp vào bảng tạm thành công"
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "Di chuyển tệp đã chọn vào bảng tạm"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "Vô hiệu hóa quyền của %(count)dtệp thành công"
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "Kích hoạt quyền của %(count)dtệp thành công"
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "Kích hoạt quyền cho các tệp đã chọn"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "Vô hiệu hóa quyền của các tệp đã chọn"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "Đã xóa %(count)d tệp và/hoặc thư mục thành công. "
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "Không thể xóa các tệp và/hoặc các thư mục"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "Bạn chắc chắn chứ?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "Xóa các tệp và/hoặc các thư mục"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "Xóa các tệp và/hoặc các thư mục dã chọn"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "Các thư mục với tên %s đã tồn tại ở vị trí đã chọn"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Đã di chuyển %(count)d tệp và/hoặc thư mục tới thư mục '%(destination)s'."
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "Di chuyển tệp và/hoặc thư mục"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "Đã di chuyển tệp và/hoặc thư mục đã chọn"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "Đã thành công đổi tên %(count)d tệp."
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "Đổi tên tệp"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+"Đã thành công sao chép %(count)d tệp và/hoặc thư mục tới thư mục "
+"'%(destination)s'."
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "Sao chép tệp và/hoặc thư mục"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "Sao chép tệp và/hoặc thư mục đã chọn"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "Đã thành công thay đổi kích thước %(count)d ảnh."
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "Thay đổi kích thước ảnh"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "Thay dổi kích thước ảnh đã chọn"
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "Hậu tố sẽ được nối vào tên của tệp đã sao chép."
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+"Hậu tố phải là một phần tên tệp hợp lệ, đơn giản và chữ thường, như "
+"\"%(valid)s\"."
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "Không biết định dạng đổi tên của khóa giá trị \"%(key)s\"."
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "Định dạng đổi tên không hợp lệ: %(error)s."
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "tùy chọn thumbnail"
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "Độ rộng"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "Độ cao"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "Xén"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "cao cấp"
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "Tùy chọn thumbnail hoặc tham số thay đổi kích thước phải được chọn."
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr "Vị trí chủ đề"
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "Vị trí của chủ đề chính của của quang cảnh. Định dạng: \"x,y\"."
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr "Định dạng vị trí chủ đề không hợp lệ."
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr "Vị trí chủ đề ở bên ngoài hình ảnh."
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "Đầu vào của bạn: \"{subject_location}\"."
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "Thư mục với tên này đã tồn tại."
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "Filer"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "Thư viện phương tiện"
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr "văn bản thay thế mặc định"
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr "đầu đề mặc định"
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr "vị trí chủ đề"
+
+#: models/abstract.py:91
+msgid "image"
+msgstr "hình ảnh"
+
+#: models/abstract.py:92
+msgid "images"
+msgstr "những hình ảnh"
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "người dùng"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "những tệp"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "bảng tạm"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "những bảng tạm"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "tệp"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "item bảng tạm"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "items bảng tạm"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "thư mục"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "kích thước tệp"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "sha1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "có tất cả dữ liệu ủy thác"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "tên tệp gốc"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "tên"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "mô tả"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "người sở hữu"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "đã tải lên tại"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "đã chỉnh sửa tại"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "Quyền bị vô hiệu hóa"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+"Vô hiệu hóa bất kỳ quyền kiểm tra cho tệp này. Tệp sẽ truy cập được bởi bất "
+"kỳ ai."
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "đã tạo tại"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "Thư mục"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "Những thư mục"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "tất cả đồ"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "chỉ đồ này"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "đồ này và tất cả các con"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "cho phép"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "không cho phép"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "kiểu"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "nhóm"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "tất cả mọi người"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "có thể đọc"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "có thể tùy chỉnh"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "có thể thêm con"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "quyền thư mục"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "những quyền thư mục"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "ngày nắm giữ"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "tác giả"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "phải luôn công khai tài khoản tác giả"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "phải luôn công khai bản quyền"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "độ rộng bằng pixel"
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "độ cao bằng pixel"
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "những tùy chọn thumbnail"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "Những tải lên chưa sắp xếp"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "những tệp với metadata bị mất"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "gốc"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "Chạy hành dộng đã chọn"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "Đi"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "Bấn ở đây để chọn những đối tượng xuyên suốt tất cả các trang"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "Chọn tất cả %(total_count)s tệp và/hoặc thư mục"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "Xóa chọn"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "Trở lại trang chủ người quản trị"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "Trang chủ"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "Trở lại ứng dụng Filer"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "Trở lại thư mục gốc"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "Trở lại '%(folder_name)s' thư mục"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "Lặp"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Xóa tệp và/hoặc thưc mục đã chọn sẽ dẫn đến xóa đối tượng liên quan, nhưng "
+"tài khoản của bạn không có quyền xóa những loại của các đối tượng:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+"Xóa tệp và/hoặc thư mục đã chọn sẽ yêu cầu xóa những đối tượng liên quan "
+"được bảo vệ sau:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Bạn có chắc muốn xóa tệp và/hoặc thư mục đã chọn? Tất cả những đối tượng và "
+"những thứ liên quan đến chúng sẽ bị xóa:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "Không, đưa tôi quay lại"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "Có, Tôi chắc chắn"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "Lịch sử"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "Xem trong trang"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "Quay lại"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "trang chủ người quản trị"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "Biểu tượng thư mục"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+"Tài khoản của bạn không có quyền để sao chép tất cả tệp và thư mục được chọn."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "Đưa tôi quay lại"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "Không có thư mục đích"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "Không có tệp và/hoặc thư mục để sao chép."
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Những tệp và thư mục sau sẽ được sao chép tới một thư mục đích (giữ cấu trúc "
+"cây thư mục):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "Thư mục đích:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "Sao chép"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "Không cho phép sao chép tệp tới cùng thư mục"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+"Tài khoản của bạn không có quyền để thay đổi kích thước của tất cả hình ảnh "
+"đã chọn."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "Không có hình ảnh để thay dổi kích thước"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "Hình ảnh dưới đay sẽ bị thay đổi kích thước:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+"Chọn một tùy chọn của thumbnail đang tồn tại hoặc nhập tham số thay đổi kích "
+"thước:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+"Cảnh bảo: Hình ảnh sẽ bị thay đổi tại chỗ và ảnh gốc sẽ bị mất. Có thể tạo "
+"một sao chép của chúng để giữ lại hình ảnh gốc."
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "Thay đổi kích thước"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+"Tài khoản của bạn không có quyền để di chuyển tất cả các tệp và thư mục đã "
+"chọn."
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "Không có tệp và/hoặc thư mục để di chuyển."
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+"Tệp và thư mục dưới đây sẽ được chuyển tới thư mục đích (giữ nguyên cấu trúc "
+"cây thư mục):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "Di chuyển"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "Không cho phép di chuyển tệp vào cùng thư mục"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "Tài khoản của bạn không có quyền để đổi tên tất cả các tệp đã chọn."
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "Không có tệp để đổi tên."
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+"Tệp dưới đây sẽ bị đổi tên (chúng vẫn ở trong thư mục của chúng và giữ tên "
+"gốc, chỉ tên hiển thị sẽ bị thay đổi):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "Đổi tên"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "Trở lại thư mục cha"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "Thay đổi thông tin chi tiết thư mục hiện tại"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "Thay đổi"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "Bấm vào đây để chạy tìm kiếm cho đoạn văn đã nhập"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "Tìm kiếm"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "Đóng"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "Giới hạn"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "Chọn để giới hạn tìm kiếm cho thư mục hiện tại"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "Giới hạn tìm kiếm cho thư mục hiện tại"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "Xóa"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "Thêm một thư mục mới"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "Thư mục mới"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "Tải tệp lên"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "Bạn đầu tiên phải chọn một thư mục"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "Tên"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr "Người sở hữu"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr "Kích thước"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "Hành động"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "Thay đổi thông tin chi tiết thư mục '%(item_label)s' "
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s thư mục"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s tệp"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "Thay dổi thông tin chi tiết thư mục"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "Xóa thư mục"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "Chọn tệp này"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "Thay đổi thông tin chi tiết '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "Quyền"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "đã vô hiệu hóa"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "đã kích hoạt"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, fuzzy
+#| msgid "Move selected files to clipboard"
+msgid "URL copied to clipboard"
+msgstr "Di chuyển tệp đã chọn vào bảng tạm"
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr "Url hợp chuẩn '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr "Tải '%(item_label)s'"
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr "Xóa tệp"
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "Thả tệp ở đây hoặc sử dụng nút \"Tải tệp lên\""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "Thả tệp của bạn để tải lên:"
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "Tải lên"
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "hủy bỏ"
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "Tải lên thành công!"
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "Tải lên đã bị hủy!"
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "trước đó"
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "Trang %(number)s trên %(num_pages)s."
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "tiếp theo"
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "Chọn tất cả %(total_count)s"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "Thêm mới"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Trang quản trị Django"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Hãy sửa lỗi dưới đây."
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "Lưu"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "Bảng tạm"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "Dán những thứ ở đây"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "Di chuyển tất cả tệp bảng tạm tới"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "Làm rỗng bảng tạm"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "bảng tạm rỗng"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "tải lên lỗi"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr "Kiểu"
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr "Kích thước tệp"
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr "Đã chỉnh sửa"
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr "Đã tạo"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "tìm thấy"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "và"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "hủy tìm kiếm"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "Xóa"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "hoặc thả tệp của bạn ở đây"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "không có tệp được chọn"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "Tìm kiếm"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "Chọn tệp"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/zh-Hans/LC_MESSAGES/django.mo b/filer/locale/zh-Hans/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..3ca706516
Binary files /dev/null and b/filer/locale/zh-Hans/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/zh-Hans/LC_MESSAGES/django.po b/filer/locale/zh-Hans/LC_MESSAGES/django.po
new file mode 100644
index 000000000..20e70e4d0
--- /dev/null
+++ b/filer/locale/zh-Hans/LC_MESSAGES/django.po
@@ -0,0 +1,1208 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+# Aosp T, 2016-2017
+# node uuz , 2019
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-20 10:11+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: node uuz , 2019\n"
+"Language-Team: Chinese Simplified (http://app.transifex.com/divio/django-filer/language/zh-Hans/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh-Hans\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: admin/clipboardadmin.py:16
+#| msgid ""
+#| "ccount doesn't have permissions to rename all of the selected files."
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:17
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:19
+msgid ""
+"Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:49
+msgid "Advanced"
+msgstr "高级"
+
+#: admin/fileadmin.py:164
+msgid "canonical URL"
+msgstr "权威URL"
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr "要对执行此操作,必须选择项目。没有项目被更改。"
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "选择了 %(total_count)s 个"
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr "%(folder_name)s文件夹列表"
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "选择了 %(cnt)s 中的 0 个"
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr "没有选择任何动作。"
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr "成功将 %(count)d 个文件移动到剪贴板。"
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr "移动所选文件到剪贴板"
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr "成功禁用了权限设置(%(count)d 个文件)。"
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr "成功启用了权限设置(%(count)d 个文件)。"
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr "对于所选文件,启用权限设置"
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr "对于所选文件,禁用权限设置"
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr "成功删除了 %(count)d 个文件或目录"
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr "目录或文件删除失败"
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr "确定吗?"
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr "删除文件或目录"
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr "删除所选的文件或目录"
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr "所选的位置已存在名为 %s 的目录"
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "成功移动 %(count)d 个文件或目录到 '%(destination)s'。"
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr "移动目录或文件"
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr "移动所选的目录或文件"
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr "成功重命名 %(count)d 个文件。"
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr "重命名文件"
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr "成功将 %(count)d 个文件或目录复制到 '%(destination)s'。"
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr "复制文件或目录"
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr "复制所选的文件或目录"
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr "成功缩放 %(count)d 个图片。"
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr "缩放图片"
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr "缩放所选的图片"
+
+#: admin/forms.py:25
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr "所复制文件的文件名将会加上后缀。"
+
+#: admin/forms.py:32
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr "后缀应该类似 \"%(valid)s\",是简单、小写的部分文件名称"
+
+#: admin/forms.py:53
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr "未知重命名格式: \"%(key)s\"."
+
+#: admin/forms.py:55
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr "无效的重命名格式:%(error)s 。"
+
+#: admin/forms.py:69 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr "缩略图选项"
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr "宽"
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr "高"
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr "裁剪"
+
+#: admin/forms.py:76 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr "修改分辨率"
+
+#: admin/forms.py:80
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr "必须选择缩略图选项或缩放参数。"
+
+#: admin/imageadmin.py:18 admin/imageadmin.py:105
+msgid "Subject location"
+msgstr "主题位置"
+
+#: admin/imageadmin.py:19
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr "场景中的主题位置。格式:“x,y”。"
+
+#: admin/imageadmin.py:57
+msgid "Invalid subject location format. "
+msgstr "错误的主题位置格式"
+
+#: admin/imageadmin.py:65
+msgid "Subject location is outside of the image. "
+msgstr "主题位置超出了图片范围"
+
+#: admin/imageadmin.py:74
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr "你输入的:\"{subject_location}\"。"
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr "这个名称的目录已经存在。"
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr "文件管理器"
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr "媒体库"
+
+#: models/abstract.py:49
+msgid "default alt text"
+msgstr "默认提示文本"
+
+#: models/abstract.py:56
+msgid "default caption"
+msgstr "默认标题"
+
+#: models/abstract.py:63
+msgid "subject location"
+msgstr "主题位置"
+
+#: models/abstract.py:78
+msgid "image"
+msgstr "图片"
+
+#: models/abstract.py:79
+msgid "images"
+msgstr "图片"
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr "用户"
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr "文件"
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr "剪贴板"
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr "剪贴板"
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr "文件"
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr "剪贴板对象"
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr "剪贴板对象"
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr "目录"
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr "文件大小"
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr "SHA1"
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr "存在强制性数据"
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr "原始文件名"
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr "名称"
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr "描述"
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr "所有者"
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr "上传于"
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr "修改于"
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr "已禁用权限设置"
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr "对此文件禁用所有权限设置。此文件将可以被任何人公开访问。"
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr "创建于"
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr "目录"
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr "目录"
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr "所有项目"
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr "仅此项目"
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr "此项目和所有子项目"
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr "允许"
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr "拒绝"
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr "类型"
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr "组"
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr "所有人"
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr "可读"
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr "可编辑"
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr "可增加子项目"
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr "目录权限"
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr "目录权限"
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+#| msgid "Folders"
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+#| msgid "everybody"
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+#| msgid "can add children"
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr "日期令牌"
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr "作者"
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr "必须发布作者信息"
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr "必须发布版权"
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr "像素宽度"
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr "像素高度"
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr "缩略图选项"
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:167
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr "未分类的上传"
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr "确实元数据的文件"
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr "根目录"
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+#| msgid "thumbnail option"
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr "运行所选的动作"
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr "开始"
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:232
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr "选择所有页面的对象"
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr "选择 %(total_count)s 个文件或目录"
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:234
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr "清空选择"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr "回到管理首页"
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr "首页"
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr "回到文件管理器首页"
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr "回到根目录"
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr "回到 '%(folder_name)s' 目录"
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr "重复"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr "删除所选的文件或目录会将相关的对象同时删除,但是你的账号没有删除下面这些类型对象的权限:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr "删除所选的文件或目录会将询问是否删除以下保护对象:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr "确认删除所选的文件或目录吗?以下所有相关的对象都会删除:"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr "不,返回"
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr "是的,我确定"
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr "历史"
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr "查看站点"
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr "后退到"
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr "管理首页"
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr "目录图标"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files "
+"and/or folders."
+msgstr "你的账户没有权限复制所有所选的目录或文件。"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr "返回"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr "目标目录无效"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr "没有文件或目录可以复制"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr "以下的文件将复制到目标目录(包含它们的树结构):"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr "目标目录:"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr "复制"
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr "不允许将文件复制到相同目录"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr "你的账号没有权限缩放所有所选的图片。"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr "没有图片可缩放。"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr "以下图片将被缩放:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr "选择一个缩略图选项或输入缩放参数:"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr "警告:图片将被缩放,并且源文件将被覆盖。你应该先将它们做个备份。"
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr "缩放"
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files "
+"and/or folders."
+msgstr "你的账号没有移动所有所选文件或目录的权限。"
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr "没有文件或目录可移动。"
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr "以下的文件将移动到目标目录(包含它们的树结构):"
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr "移动"
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr "不允许将文件移动到相同目录。"
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr "你的账号没有重命名所有所选文件的权限。"
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr "没有文件可重命名。"
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr "以下文件将被重命名(源文件不变,只是显示名称被修改而已):"
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr "重命名"
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr "回到父目录"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr "修改当前目录属性"
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr "修改"
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr "点击开始搜索"
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr "搜索"
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr "关闭"
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr "限定"
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr "将搜索限定在当前目录"
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr "将搜索限定在当前目录"
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr "删除"
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr "新增一个目录"
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr "新增目录"
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr "上传文件"
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr "必须先选择一个目录"
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr "名称"
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:49
+msgid "Owner"
+msgstr "所有者"
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:33
+msgid "Size"
+msgstr "大小"
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr "动作"
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr "修改 '%(item_label)s' 目录的属性"
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] "%(counter)s 个目录"
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] "%(counter)s 个文件"
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr "修改目录属性"
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr "删除目录"
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr "选择这个文件"
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:151
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr "修改 '%(item_label)s' 的属性"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr "权限"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr "禁用"
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr "激活"
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+#, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Canonical url '%(item_label)s'"
+msgstr "权威URL %(item_label)s"
+
+#: templates/admin/filer/folder/directory_table_list.html:148
+#, python-format
+#| msgid "Change '%(item_label)s' details"
+msgid "Download '%(item_label)s'"
+msgstr "下载 %(item_label)s"
+
+#: templates/admin/filer/folder/directory_table_list.html:152
+msgid "Remove file"
+msgstr "删除文件"
+
+#: templates/admin/filer/folder/directory_table_list.html:160
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr "拖放文件到这里或使用“上传文件”按钮"
+
+#: templates/admin/filer/folder/directory_table_list.html:175
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr "拖放文件到:"
+
+#: templates/admin/filer/folder/directory_table_list.html:185
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr "上传"
+
+#: templates/admin/filer/folder/directory_table_list.html:197
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr "取消"
+
+#: templates/admin/filer/folder/directory_table_list.html:201
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr "上传成功!"
+
+#: templates/admin/filer/folder/directory_table_list.html:205
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr "取消上传!"
+
+#: templates/admin/filer/folder/directory_table_list.html:212
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr "上一个"
+
+#: templates/admin/filer/folder/directory_table_list.html:217
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr "第 %(number)s 页,共 %(num_pages)s 页"
+
+#: templates/admin/filer/folder/directory_table_list.html:222
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr "下一个"
+
+#: templates/admin/filer/folder/directory_table_list.html:232
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr "选择了 %(total_count)s 个"
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+#| msgid "Select this file"
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+#| msgid "Filer"
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr "新增"
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr "Django 网站管理"
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "请更正下面的错误。"
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr "保存"
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr "剪贴板"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr "粘贴所有对象到这里"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr "移动所有剪贴板文件到"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr "清空剪贴板"
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr "剪贴板是空的"
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr "上传失败"
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:15
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:20
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:107
+#| msgid "file missing"
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:29
+msgid "Type"
+msgstr "类型"
+
+#: templates/admin/filer/tools/detail_info.html:37
+msgid "File-size"
+msgstr "文件大小"
+
+#: templates/admin/filer/tools/detail_info.html:41
+msgid "Modified"
+msgstr "修改时间"
+
+#: templates/admin/filer/tools/detail_info.html:45
+msgid "Created"
+msgstr "创建时间"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr "已找到"
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr "与"
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr "取消搜索"
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr "清空"
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr "或在此放入你的文件"
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr "没选择文件"
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr "查找"
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr "选择文件"
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+#| msgid "Choose File"
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:19
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:22
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:33
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:71
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/zh/LC_MESSAGES/django.mo b/filer/locale/zh/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..1f47492f0
Binary files /dev/null and b/filer/locale/zh/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/zh/LC_MESSAGES/django.po b/filer/locale/zh/LC_MESSAGES/django.po
new file mode 100644
index 000000000..217dde434
--- /dev/null
+++ b/filer/locale/zh/LC_MESSAGES/django.po
@@ -0,0 +1,1219 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Chinese (http://app.transifex.com/divio/django-filer/language/"
+"zh/)\n"
+"Language: zh\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/zh_CN/LC_MESSAGES/django.mo b/filer/locale/zh_CN/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..0da366bff
Binary files /dev/null and b/filer/locale/zh_CN/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/zh_CN/LC_MESSAGES/django.po b/filer/locale/zh_CN/LC_MESSAGES/django.po
new file mode 100644
index 000000000..442ac25a4
--- /dev/null
+++ b/filer/locale/zh_CN/LC_MESSAGES/django.po
@@ -0,0 +1,1219 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Chinese (China) (http://app.transifex.com/divio/django-filer/"
+"language/zh_CN/)\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/locale/zh_TW/LC_MESSAGES/django.mo b/filer/locale/zh_TW/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..fdfa81427
Binary files /dev/null and b/filer/locale/zh_TW/LC_MESSAGES/django.mo differ
diff --git a/filer/locale/zh_TW/LC_MESSAGES/django.po b/filer/locale/zh_TW/LC_MESSAGES/django.po
new file mode 100644
index 000000000..a14b91d38
--- /dev/null
+++ b/filer/locale/zh_TW/LC_MESSAGES/django.po
@@ -0,0 +1,1219 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+# Translators:
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: django Filer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-30 18:10+0200\n"
+"PO-Revision-Date: 2012-07-13 15:50+0000\n"
+"Last-Translator: Angelo Dini \n"
+"Language-Team: Chinese (Taiwan) (http://app.transifex.com/divio/django-filer/"
+"language/zh_TW/)\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: admin/clipboardadmin.py:17
+msgid "You do not have permission to upload files."
+msgstr ""
+
+#: admin/clipboardadmin.py:18
+msgid "Can't find folder to upload. Please refresh and try again"
+msgstr ""
+
+#: admin/clipboardadmin.py:20
+msgid "Can't use this folder, Permission Denied. Please select another folder."
+msgstr ""
+
+#: admin/fileadmin.py:73
+msgid "Advanced"
+msgstr ""
+
+#: admin/fileadmin.py:188
+msgid "canonical URL"
+msgstr ""
+
+#: admin/folderadmin.py:411 admin/folderadmin.py:582
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: admin/folderadmin.py:434
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+
+#: admin/folderadmin.py:460
+#, python-format
+msgid "Directory listing for %(folder_name)s"
+msgstr ""
+
+#: admin/folderadmin.py:475
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: admin/folderadmin.py:612
+msgid "No action selected."
+msgstr ""
+
+#: admin/folderadmin.py:664
+#, python-format
+msgid "Successfully moved %(count)d files to clipboard."
+msgstr ""
+
+#: admin/folderadmin.py:669
+msgid "Move selected files to clipboard"
+msgstr ""
+
+#: admin/folderadmin.py:709
+#, python-format
+msgid "Successfully disabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:711
+#, python-format
+msgid "Successfully enabled permissions for %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:719
+msgid "Enable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:725
+msgid "Disable permissions for selected files"
+msgstr ""
+
+#: admin/folderadmin.py:789
+#, python-format
+msgid "Successfully deleted %(count)d files and/or folders."
+msgstr ""
+
+#: admin/folderadmin.py:794
+msgid "Cannot delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:796
+msgid "Are you sure?"
+msgstr ""
+
+#: admin/folderadmin.py:802
+msgid "Delete files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:823
+msgid "Delete selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:930
+#, python-format
+msgid "Folders with names %s already exist at the selected destination"
+msgstr ""
+
+#: admin/folderadmin.py:934
+#, python-format
+msgid ""
+"Successfully moved %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:942 admin/folderadmin.py:944
+msgid "Move files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:959
+msgid "Move selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1016
+#, python-format
+msgid "Successfully renamed %(count)d files."
+msgstr ""
+
+#: admin/folderadmin.py:1025 admin/folderadmin.py:1027
+#: admin/folderadmin.py:1042
+msgid "Rename files"
+msgstr ""
+
+#: admin/folderadmin.py:1137
+#, python-format
+msgid ""
+"Successfully copied %(count)d files and/or folders to folder "
+"'%(destination)s'."
+msgstr ""
+
+#: admin/folderadmin.py:1155 admin/folderadmin.py:1157
+msgid "Copy files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1174
+msgid "Copy selected files and/or folders"
+msgstr ""
+
+#: admin/folderadmin.py:1279
+#, python-format
+msgid "Successfully resized %(count)d images."
+msgstr ""
+
+#: admin/folderadmin.py:1286 admin/folderadmin.py:1288
+msgid "Resize images"
+msgstr ""
+
+#: admin/folderadmin.py:1303
+msgid "Resize selected images"
+msgstr ""
+
+#: admin/forms.py:24
+msgid "Suffix which will be appended to filenames of copied files."
+msgstr ""
+
+#: admin/forms.py:31
+#, python-format
+msgid ""
+"Suffix should be a valid, simple and lowercase filename part, like "
+"\"%(valid)s\"."
+msgstr ""
+
+#: admin/forms.py:52
+#, python-format
+msgid "Unknown rename format value key \"%(key)s\"."
+msgstr ""
+
+#: admin/forms.py:54
+#, python-format
+msgid "Invalid rename format: %(error)s."
+msgstr ""
+
+#: admin/forms.py:68 models/thumbnailoptionmodels.py:37
+msgid "thumbnail option"
+msgstr ""
+
+#: admin/forms.py:72 models/thumbnailoptionmodels.py:15
+msgid "width"
+msgstr ""
+
+#: admin/forms.py:73 models/thumbnailoptionmodels.py:20
+msgid "height"
+msgstr ""
+
+#: admin/forms.py:74 models/thumbnailoptionmodels.py:25
+msgid "crop"
+msgstr ""
+
+#: admin/forms.py:75 models/thumbnailoptionmodels.py:30
+msgid "upscale"
+msgstr ""
+
+#: admin/forms.py:79
+msgid "Thumbnail option or resize parameters must be choosen."
+msgstr ""
+
+#: admin/imageadmin.py:20 admin/imageadmin.py:112
+msgid "Subject location"
+msgstr ""
+
+#: admin/imageadmin.py:21
+msgid "Location of the main subject of the scene. Format: \"x,y\"."
+msgstr ""
+
+#: admin/imageadmin.py:59
+msgid "Invalid subject location format. "
+msgstr ""
+
+#: admin/imageadmin.py:67
+msgid "Subject location is outside of the image. "
+msgstr ""
+
+#: admin/imageadmin.py:76
+#, python-brace-format
+msgid "Your input: \"{subject_location}\". "
+msgstr ""
+
+#: admin/permissionadmin.py:10 models/foldermodels.py:380
+msgid "Who"
+msgstr ""
+
+#: admin/permissionadmin.py:11 models/foldermodels.py:401
+msgid "What"
+msgstr ""
+
+#: admin/views.py:55
+msgid "Folder with this name already exists."
+msgstr ""
+
+#: apps.py:11 templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/directory_listing.html:33
+msgid "Filer"
+msgstr ""
+
+#: contrib/django_cms/cms_toolbars.py:44
+msgid "Media library"
+msgstr ""
+
+#: models/abstract.py:62
+msgid "default alt text"
+msgstr ""
+
+#: models/abstract.py:69
+msgid "default caption"
+msgstr ""
+
+#: models/abstract.py:76
+msgid "subject location"
+msgstr ""
+
+#: models/abstract.py:91
+msgid "image"
+msgstr ""
+
+#: models/abstract.py:92
+msgid "images"
+msgstr ""
+
+#: models/abstract.py:148
+#, python-format
+msgid ""
+"Image format not recognized or image size exceeds limit of %(max_pixels)d "
+"million pixels by a factor of two or more. Before uploading again, check "
+"file format or resize image to %(width)d x %(height)d resolution or lower."
+msgstr ""
+
+#: models/abstract.py:156
+#, python-format
+msgid ""
+"Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+"million pixels. Before uploading again, resize image to %(width)d x "
+"%(height)d resolution or lower."
+msgstr ""
+
+#: models/clipboardmodels.py:11 models/foldermodels.py:289
+msgid "user"
+msgstr ""
+
+#: models/clipboardmodels.py:17 models/filemodels.py:157
+msgid "files"
+msgstr ""
+
+#: models/clipboardmodels.py:24 models/clipboardmodels.py:50
+msgid "clipboard"
+msgstr ""
+
+#: models/clipboardmodels.py:25
+msgid "clipboards"
+msgstr ""
+
+#: models/clipboardmodels.py:44 models/filemodels.py:74
+#: models/filemodels.py:156
+msgid "file"
+msgstr ""
+
+#: models/clipboardmodels.py:56
+msgid "clipboard item"
+msgstr ""
+
+#: models/clipboardmodels.py:57
+msgid "clipboard items"
+msgstr ""
+
+#: models/filemodels.py:66 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "folder"
+msgstr ""
+
+#: models/filemodels.py:81
+msgid "file size"
+msgstr ""
+
+#: models/filemodels.py:87
+msgid "sha1"
+msgstr ""
+
+#: models/filemodels.py:94
+msgid "has all mandatory data"
+msgstr ""
+
+#: models/filemodels.py:100
+msgid "original filename"
+msgstr ""
+
+#: models/filemodels.py:110 models/foldermodels.py:102
+#: models/thumbnailoptionmodels.py:10
+msgid "name"
+msgstr ""
+
+#: models/filemodels.py:116
+msgid "description"
+msgstr ""
+
+#: models/filemodels.py:125 models/foldermodels.py:108
+msgid "owner"
+msgstr ""
+
+#: models/filemodels.py:129 models/foldermodels.py:116
+msgid "uploaded at"
+msgstr ""
+
+#: models/filemodels.py:134 models/foldermodels.py:126
+msgid "modified at"
+msgstr ""
+
+#: models/filemodels.py:140
+msgid "Permissions disabled"
+msgstr ""
+
+#: models/filemodels.py:141
+msgid ""
+"Disable any permission checking for this file. File will be publicly "
+"accessible to anyone."
+msgstr ""
+
+#: models/foldermodels.py:94
+msgid "parent"
+msgstr ""
+
+#: models/foldermodels.py:121
+msgid "created at"
+msgstr ""
+
+#: models/foldermodels.py:136 templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Folder"
+msgstr ""
+
+#: models/foldermodels.py:137
+#: templates/admin/filer/folder/directory_thumbnail_list.html:12
+msgid "Folders"
+msgstr ""
+
+#: models/foldermodels.py:260
+msgid "all items"
+msgstr ""
+
+#: models/foldermodels.py:261
+msgid "this item only"
+msgstr ""
+
+#: models/foldermodels.py:262
+msgid "this item and all children"
+msgstr ""
+
+#: models/foldermodels.py:266
+msgid "inherit"
+msgstr ""
+
+#: models/foldermodels.py:267
+msgid "allow"
+msgstr ""
+
+#: models/foldermodels.py:268
+msgid "deny"
+msgstr ""
+
+#: models/foldermodels.py:280
+msgid "type"
+msgstr ""
+
+#: models/foldermodels.py:297
+msgid "group"
+msgstr ""
+
+#: models/foldermodels.py:304
+msgid "everybody"
+msgstr ""
+
+#: models/foldermodels.py:309
+msgid "can read"
+msgstr ""
+
+#: models/foldermodels.py:317
+msgid "can edit"
+msgstr ""
+
+#: models/foldermodels.py:325
+msgid "can add children"
+msgstr ""
+
+#: models/foldermodels.py:333
+msgid "folder permission"
+msgstr ""
+
+#: models/foldermodels.py:334
+msgid "folder permissions"
+msgstr ""
+
+#: models/foldermodels.py:348
+msgid "Folder cannot be selected with type \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:350
+msgid "Folder has to be selected when type is not \"all items\"."
+msgstr ""
+
+#: models/foldermodels.py:352
+msgid "User or group cannot be selected together with \"everybody\"."
+msgstr ""
+
+#: models/foldermodels.py:354
+msgid "At least one of user, group, or \"everybody\" has to be selected."
+msgstr ""
+
+#: models/foldermodels.py:360
+msgid "All Folders"
+msgstr ""
+
+#: models/foldermodels.py:362
+msgid "Logical Path"
+msgstr ""
+
+#: models/foldermodels.py:371
+#, python-brace-format
+msgid "User: {user}"
+msgstr ""
+
+#: models/foldermodels.py:373
+#, python-brace-format
+msgid "Group: {group}"
+msgstr ""
+
+#: models/foldermodels.py:375
+msgid "Everybody"
+msgstr ""
+
+#: models/foldermodels.py:388 templates/admin/filer/widgets/admin_file.html:45
+msgid "Edit"
+msgstr ""
+
+#: models/foldermodels.py:389
+msgid "Read"
+msgstr ""
+
+#: models/foldermodels.py:390
+msgid "Add children"
+msgstr ""
+
+#: models/imagemodels.py:18
+msgid "date taken"
+msgstr ""
+
+#: models/imagemodels.py:25
+msgid "author"
+msgstr ""
+
+#: models/imagemodels.py:32
+msgid "must always publish author credit"
+msgstr ""
+
+#: models/imagemodels.py:37
+msgid "must always publish copyright"
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:16
+msgid "width in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:21
+msgid "height in pixel."
+msgstr ""
+
+#: models/thumbnailoptionmodels.py:38
+msgid "thumbnail options"
+msgstr ""
+
+#: models/virtualitems.py:46
+#: templates/admin/filer/folder/directory_table_list.html:4
+#: templates/admin/filer/folder/directory_table_list.html:170
+#: templates/admin/filer/folder/directory_thumbnail_list.html:5
+#: templates/admin/filer/folder/directory_thumbnail_list.html:146
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Unsorted Uploads"
+msgstr ""
+
+#: models/virtualitems.py:73
+msgid "files with missing metadata"
+msgstr ""
+
+#: models/virtualitems.py:87 templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "root"
+msgstr ""
+
+#: settings.py:273
+msgid "Show table view"
+msgstr ""
+
+#: settings.py:278
+msgid "Show thumbnail view"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Run the selected action"
+msgstr ""
+
+#: templates/admin/filer/actions.html:5
+msgid "Go"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: templates/admin/filer/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s files and/or folders"
+msgstr ""
+
+#: templates/admin/filer/actions.html:16
+#: templates/admin/filer/folder/directory_table_list.html:237
+#: templates/admin/filer/folder/directory_thumbnail_list.html:212
+msgid "Clear selection"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/directory_listing.html:28
+msgid "Go back to admin homepage"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:4
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/directory_listing.html:29
+msgid "Home"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:5
+#: templates/admin/filer/folder/directory_listing.html:32
+msgid "Go back to Filer app"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:6
+#: templates/admin/filer/folder/directory_listing.html:35
+msgid "Go back to root folder"
+msgstr ""
+
+#: templates/admin/filer/breadcrumbs.html:8
+#: templates/admin/filer/breadcrumbs.html:18
+#: templates/admin/filer/folder/change_form.html:10
+#: templates/admin/filer/folder/directory_listing.html:39
+#: templates/admin/filer/folder/directory_listing.html:47
+#, python-format
+msgid "Go back to '%(folder_name)s' folder"
+msgstr ""
+
+#: templates/admin/filer/change_form.html:26
+msgid "Duplicates"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:11
+msgid ""
+"Deleting the selected files and/or folders would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:19
+msgid ""
+"Deleting the selected files and/or folders would require deleting the "
+"following protected related objects:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:27
+msgid ""
+"Are you sure you want to delete the selected files and/or folders? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:46
+#: templates/admin/filer/folder/choose_copy_destination.html:64
+#: templates/admin/filer/folder/choose_move_destination.html:72
+msgid "No, take me back"
+msgstr ""
+
+#: templates/admin/filer/delete_selected_files_confirmation.html:47
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:35
+#: templates/admin/filer/folder/change_form.html:21
+#: templates/admin/filer/image/change_form.html:35
+msgid "History"
+msgstr ""
+
+#: templates/admin/filer/file/change_form.html:37
+#: templates/admin/filer/folder/change_form.html:23
+#: templates/admin/filer/image/change_form.html:37
+msgid "View on site"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+#: templates/admin/filer/folder/change_form.html:7
+#: templates/admin/filer/folder/change_form.html:8
+#: templates/admin/filer/folder/directory_listing.html:102
+msgid "Go back to"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:6
+msgid "admin homepage"
+msgstr ""
+
+#: templates/admin/filer/folder/change_form.html:37
+#: templates/admin/filer/folder/directory_listing.html:95
+#: templates/admin/filer/folder/directory_listing.html:103
+#: templates/admin/filer/folder/directory_table_list.html:29
+#: templates/admin/filer/folder/directory_table_list.html:59
+#: templates/admin/filer/folder/directory_table_list.html:181
+#: templates/admin/filer/folder/directory_thumbnail_list.html:27
+#: templates/admin/filer/folder/directory_thumbnail_list.html:61
+#: templates/admin/filer/folder/directory_thumbnail_list.html:156
+msgid "Folder Icon"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:23
+msgid ""
+"Your account doesn't have permissions to copy all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:25
+#: templates/admin/filer/folder/choose_copy_destination.html:31
+#: templates/admin/filer/folder/choose_copy_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:37
+#: templates/admin/filer/folder/choose_move_destination.html:43
+#: templates/admin/filer/folder/choose_move_destination.html:49
+msgid "Take me back"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:29
+#: templates/admin/filer/folder/choose_move_destination.html:41
+msgid "There are no destination folders available."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:35
+msgid "There are no files and/or folders available to copy."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:40
+msgid ""
+"The following files and/or folders will be copied to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:54
+#: templates/admin/filer/folder/choose_move_destination.html:64
+msgid "Destination folder:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:65
+#: templates/admin/filer/folder/choose_copy_destination.html:68
+#: templates/admin/filer/folder/directory_listing.html:178
+msgid "Copy"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_copy_destination.html:67
+msgid "It is not allowed to copy files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:15
+msgid ""
+"Your account doesn't have permissions to resize all of the selected images."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:18
+msgid "There are no images available to resize."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:20
+msgid "The following images will be resized:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:32
+msgid "Choose an existing thumbnail option or enter resize parameters:"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:36
+msgid ""
+"Warning: Images will be resized in-place and originals will be lost. Maybe "
+"first make a copy of them to retain the originals."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_images_resize_options.html:39
+msgid "Resize"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:35
+msgid ""
+"Your account doesn't have permissions to move all of the selected files and/"
+"or folders."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:47
+msgid "There are no files and/or folders available to move."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:52
+msgid ""
+"The following files and/or folders will be moved to a destination folder "
+"(retaining their tree structure):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:73
+#: templates/admin/filer/folder/choose_move_destination.html:76
+#: templates/admin/filer/folder/directory_listing.html:181
+msgid "Move"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_move_destination.html:75
+msgid "It is not allowed to move files into same folder"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:15
+msgid ""
+"Your account doesn't have permissions to rename all of the selected files."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:18
+msgid "There are no files available to rename."
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:20
+msgid ""
+"The following files will be renamed (they will stay in their folders and "
+"keep original filename, only displayed filename will be changed):"
+msgstr ""
+
+#: templates/admin/filer/folder/choose_rename_format.html:59
+msgid "Rename"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:94
+msgid "Go back to the parent folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change current folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:131
+msgid "Change"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:141
+msgid "Click here to run search for entered phrase"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:144
+msgid "Search"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:151
+msgid "Close"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:153
+msgid "Limit"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:158
+msgid "Check it to limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:159
+msgid "Limit the search to current folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:175
+msgid "Delete"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:203
+msgid "Adds a new Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:206
+msgid "New Folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:211
+#: templates/admin/filer/folder/directory_listing.html:218
+#: templates/admin/filer/folder/directory_listing.html:221
+#: templates/admin/filer/folder/directory_listing.html:228
+#: templates/admin/filer/folder/directory_listing.html:235
+msgid "Upload Files"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_listing.html:233
+msgid "You have to select a folder first"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:16
+msgid "Name"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:17
+#: templates/admin/filer/tools/detail_info.html:50
+msgid "Owner"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:18
+#: templates/admin/filer/tools/detail_info.html:34
+msgid "Size"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:19
+msgid "Action"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:28
+#: templates/admin/filer/folder/directory_table_list.html:35
+#: templates/admin/filer/folder/directory_table_list.html:58
+#: templates/admin/filer/folder/directory_table_list.html:65
+#: templates/admin/filer/folder/directory_thumbnail_list.html:26
+#: templates/admin/filer/folder/directory_thumbnail_list.html:32
+#: templates/admin/filer/folder/directory_thumbnail_list.html:60
+#: templates/admin/filer/folder/directory_thumbnail_list.html:66
+#, python-format
+msgid "Change '%(item_label)s' folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:76
+#: templates/admin/filer/tools/search_form.html:5
+#, python-format
+msgid "%(counter)s folder"
+msgid_plural "%(counter)s folders"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:77
+#: templates/admin/filer/tools/search_form.html:6
+#, python-format
+msgid "%(counter)s file"
+msgid_plural "%(counter)s files"
+msgstr[0] ""
+
+#: templates/admin/filer/folder/directory_table_list.html:83
+msgid "Change folder details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:84
+msgid "Remove folder"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:96
+#: templates/admin/filer/folder/directory_table_list.html:104
+#: templates/admin/filer/folder/directory_table_list.html:119
+#: templates/admin/filer/folder/directory_thumbnail_list.html:95
+#: templates/admin/filer/folder/directory_thumbnail_list.html:104
+#: templates/admin/filer/folder/directory_thumbnail_list.html:119
+msgid "Select this file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:107
+#: templates/admin/filer/folder/directory_table_list.html:122
+#: templates/admin/filer/folder/directory_table_list.html:154
+#: templates/admin/filer/folder/directory_thumbnail_list.html:107
+#: templates/admin/filer/folder/directory_thumbnail_list.html:122
+#, python-format
+msgid "Change '%(item_label)s' details"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "Permissions"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "disabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:131
+#: templates/admin/filer/folder/directory_thumbnail_list.html:130
+msgid "enabled"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:144
+msgid "URL copied to clipboard"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:147
+#, python-format
+msgid "Canonical url '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:151
+#, python-format
+msgid "Download '%(item_label)s'"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:155
+msgid "Remove file"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:163
+#: templates/admin/filer/folder/directory_thumbnail_list.html:138
+msgid "Drop files here or use the \"Upload Files\" button"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:178
+#: templates/admin/filer/folder/directory_thumbnail_list.html:153
+msgid "Drop your file to upload into:"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:188
+#: templates/admin/filer/folder/directory_thumbnail_list.html:163
+msgid "Upload"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:200
+#: templates/admin/filer/folder/directory_thumbnail_list.html:175
+msgid "cancel"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:204
+#: templates/admin/filer/folder/directory_thumbnail_list.html:179
+msgid "Upload success!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:208
+#: templates/admin/filer/folder/directory_thumbnail_list.html:183
+msgid "Upload canceled!"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:215
+#: templates/admin/filer/folder/directory_thumbnail_list.html:190
+msgid "previous"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:220
+#: templates/admin/filer/folder/directory_thumbnail_list.html:195
+#, python-format
+msgid "Page %(number)s of %(num_pages)s."
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:225
+#: templates/admin/filer/folder/directory_thumbnail_list.html:200
+msgid "next"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_table_list.html:235
+#: templates/admin/filer/folder/directory_thumbnail_list.html:210
+#, python-format
+msgid "Select all %(total_count)s"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:15
+#: templates/admin/filer/folder/directory_thumbnail_list.html:80
+msgid "Select all"
+msgstr ""
+
+#: templates/admin/filer/folder/directory_thumbnail_list.html:77
+msgid "Files"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+#: templates/admin/filer/folder/new_folder_form.html:7
+msgid "Add new"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: templates/admin/filer/folder/new_folder_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+
+#: templates/admin/filer/folder/new_folder_form.html:30
+msgid "Save"
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:9
+msgid "Your browser does not support audio."
+msgstr ""
+
+#: templates/admin/filer/templatetags/file_icon.html:14
+msgid "Your browser does not support video."
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:9
+msgid "Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:21
+msgid "Paste all items here"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Move all clipboard files to"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:27
+msgid "Empty Clipboard"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard.html:50
+msgid "the clipboard is empty"
+msgstr ""
+
+#: templates/admin/filer/tools/clipboard/clipboard_item_rows.html:16
+msgid "upload failed"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:11
+msgid "Download"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:16
+msgid "Expand"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:21
+#: templates/admin/filer/widgets/admin_file.html:32
+#: templatetags/filer_admin_tags.py:108
+msgid "File is missing"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:30
+msgid "Type"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:38
+msgid "File-size"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:42
+msgid "Modified"
+msgstr ""
+
+#: templates/admin/filer/tools/detail_info.html:46
+msgid "Created"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "found"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:5
+msgid "and"
+msgstr ""
+
+#: templates/admin/filer/tools/search_form.html:7
+msgid "cancel search"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:10
+#: templates/admin/filer/widgets/admin_file.html:39
+#: templates/admin/filer/widgets/admin_folder.html:18
+msgid "Clear"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:22
+msgid "or drop your file here"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:35
+msgid "no file selected"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:50
+#: templates/admin/filer/widgets/admin_folder.html:14
+msgid "Lookup"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_file.html:51
+msgid "Choose File"
+msgstr ""
+
+#: templates/admin/filer/widgets/admin_folder.html:16
+msgid "Choose Folder"
+msgstr ""
+
+#: validation.py:20
+#, python-brace-format
+msgid "File \"{file_name}\": Upload denied by site security policy"
+msgstr ""
+
+#: validation.py:23
+#, python-brace-format
+msgid "File \"{file_name}\": {file_type} upload denied by site security policy"
+msgstr ""
+
+#: validation.py:34
+#, python-brace-format
+msgid "File \"{file_name}\": HTML upload denied by site security policy"
+msgstr ""
+
+#: validation.py:72
+#, python-brace-format
+msgid ""
+"File \"{file_name}\": Rejected due to potential cross site scripting "
+"vulnerability"
+msgstr ""
+
+#: validation.py:84
+#, python-brace-format
+msgid "File \"{file_name}\": SVG file format not recognized"
+msgstr ""
+
+#~ msgid "Resize parameters must be choosen."
+#~ msgstr "Resize parameters must be choosen."
+
+#~ msgid "Choose resize parameters:"
+#~ msgstr "Choose resize parameters:"
+
+#~ msgid "Open file"
+#~ msgstr "Open file"
+
+#~ msgid "Full size preview"
+#~ msgstr "Full size preview"
+
+#~ msgid "Add Description"
+#~ msgstr "Add Description"
+
+#~ msgid "Author"
+#~ msgstr "Author"
+
+#~ msgid "Add Alt-Text"
+#~ msgstr "Add Alt-Text"
+
+#~ msgid "Add caption"
+#~ msgstr "Add caption"
+
+#~ msgid "Add Tags"
+#~ msgstr "Add Tags"
+
+#~ msgid "Change File"
+#~ msgstr "Change File"
+
+#~ msgid "none selected"
+#~ msgstr "none selected"
+
+#~ msgid "Add Folder"
+#~ msgstr "Add Folder"
+
+#~ msgid "Subject Location"
+#~ msgstr "Subject location"
+
+#~ msgid ""
+#~ "\n"
+#~ " %(counter)s file"
+#~ msgid_plural ""
+#~ "%(counter)s files\n"
+#~ " "
+#~ msgstr[0] "15c0f2d28d6dab1af1f6d94906beb627_pl_0"
+
+#~ msgid "Upload File"
+#~ msgstr "Upload File"
diff --git a/filer/management/commands/filer_check.py b/filer/management/commands/filer_check.py
new file mode 100644
index 000000000..2213de57d
--- /dev/null
+++ b/filer/management/commands/filer_check.py
@@ -0,0 +1,183 @@
+import os
+
+from django.core.management.base import BaseCommand
+from django.utils.module_loading import import_string
+
+from PIL import UnidentifiedImageError
+
+from filer import settings as filer_settings
+from filer.models.filemodels import File
+from filer.utils.loader import load_model
+
+
+class Command(BaseCommand):
+ help = "Check for orphaned files, missing file references, and set image dimensions."
+
+ def add_arguments(self, parser):
+ parser.add_argument(
+ '--orphans',
+ action='store_true',
+ dest='orphans',
+ default=False,
+ help="Scan media folders for orphaned files.",
+ )
+ parser.add_argument(
+ '--delete-orphans',
+ action='store_true',
+ dest='delete_orphans',
+ default=False,
+ help="Delete orphaned files from storage.",
+ )
+ parser.add_argument(
+ '--missing',
+ action='store_true',
+ dest='missing',
+ default=False,
+ help="Check file references and report missing files.",
+ )
+ parser.add_argument(
+ '--delete-missing',
+ action='store_true',
+ dest='delete_missing',
+ default=False,
+ help="Delete database entries if files are missing in the media folder.",
+ )
+ parser.add_argument(
+ '--image-dimensions',
+ action='store_true',
+ dest='image_dimensions',
+ default=False,
+ help="Set image dimensions if they are not set.",
+ )
+ parser.add_argument(
+ '--noinput',
+ '--no-input',
+ action='store_false',
+ dest='interactive',
+ default=True,
+ help="Do not prompt the user for any interactive input.",
+ )
+
+ def handle(self, *args, **options):
+ if options['missing']:
+ self.verify_references(options)
+ if options['delete_missing']:
+ if options['interactive']:
+ if input(
+ "\nThis will delete missing file references from the database.\n"
+ "Type 'yes' to continue, or 'no' to cancel: "
+ ) != 'yes':
+ self.stdout.write("Aborted: Missing file references were not deleted.\n")
+ self.stdout.flush()
+ return
+ self.verify_references(options)
+
+ if options['orphans'] or options['delete_orphans']:
+ if options['delete_orphans'] and options['interactive']:
+ if input(
+ "\nThis will delete orphaned files from storage.\n"
+ "Type 'yes' to continue, or 'no' to cancel: "
+ ) != 'yes':
+ self.stdout.write("Aborted: Orphaned files were not deleted.\n")
+ self.stdout.flush()
+ return
+ self.verify_storages(options)
+
+ if options['image_dimensions']:
+ self.image_dimensions(options)
+
+ def verify_references(self, options):
+ """
+ Checks that every file reference in the database exists in storage.
+ If a file is missing, either report it or delete the reference based on the provided options.
+ """
+ for file in File.objects.all():
+ if not file.file.storage.exists(file.file.name):
+ if options['delete_missing']:
+ file.delete()
+ verbose_msg = f"Deleted missing file reference '{file.folder}/{file}' from the database."
+ else:
+ verbose_msg = f"File reference '{file.folder}/{file}' is missing in storage."
+ if options.get('verbosity', 1) > 2:
+ self.stdout.write(verbose_msg + "\n")
+ self.stdout.flush()
+ elif options.get('verbosity'):
+ self.stdout.write(os.path.join(str(file.folder), str(file)) + "\n")
+ self.stdout.flush()
+
+ def verify_storages(self, options):
+ """
+ Scans all storages defined in FILER_STORAGES (e.g., public and private)
+ for orphaned files, then reports or deletes them based on the options.
+ """
+
+ def walk(storage, prefix, label_prefix):
+ # If the directory does not exist, there is nothing to scan
+ if not storage.exists(prefix):
+ return
+ child_dirs, files = storage.listdir(prefix)
+ for filename in files:
+ actual_path = os.path.join(prefix, filename)
+ relfilename = os.path.join(label_prefix, filename)
+ if not File.objects.filter(file=actual_path).exists():
+ if options['delete_orphans']:
+ storage.delete(actual_path)
+ message = f"Deleted orphaned file '{relfilename}'"
+ else:
+ message = f"Found orphaned file '{relfilename}'"
+ if options.get('verbosity', 1) > 2:
+ self.stdout.write(message + "\n")
+ self.stdout.flush()
+ elif options.get('verbosity'):
+ self.stdout.write(relfilename + "\n")
+ self.stdout.flush()
+ for child in child_dirs:
+ walk(storage, os.path.join(prefix, child), os.path.join(label_prefix, child))
+
+ # Loop through each storage configuration (e.g., public, private, etc.)
+ for storage_name, storage_config in filer_settings.FILER_STORAGES.items():
+ storage_settings = storage_config.get('main')
+ if not storage_settings:
+ continue
+ storage = import_string(storage_settings['ENGINE'])()
+ if storage_settings.get('OPTIONS', {}).get('location'):
+ storage.location = storage_settings['OPTIONS']['location']
+ # Set label_prefix: for public and private storages, use their names.
+ label_prefix = storage_name if storage_name in ['public', 'private'] else storage_settings.get('UPLOAD_TO_PREFIX', '')
+ walk(storage, storage_settings.get('UPLOAD_TO_PREFIX', ''), label_prefix)
+
+ def image_dimensions(self, options):
+ """
+ For images without set dimensions (_width == 0 or None), try to read their dimensions
+ and save them, handling SVG files and possible image errors.
+ """
+ from django.db.models import Q
+
+ import easy_thumbnails
+ from easy_thumbnails.VIL import Image as VILImage
+
+ from filer.utils.compatibility import PILImage
+
+ ImageModel = load_model(filer_settings.FILER_IMAGE_MODEL)
+ images_without_dimensions = ImageModel.objects.filter(Q(_width=0) | Q(_width__isnull=True))
+ self.stdout.write(f"Setting dimensions for {images_without_dimensions.count()} images" + "\n")
+ self.stdout.flush()
+ for image in images_without_dimensions:
+ file_holder = image.file_ptr if getattr(image, 'file_ptr', None) else image
+ try:
+ imgfile = file_holder.file
+ imgfile.seek(0)
+ except FileNotFoundError:
+ continue
+ if image.file.name.lower().endswith('.svg'):
+ # For SVG files, use VILImage (invalid SVGs do not throw errors)
+ with VILImage.load(imgfile) as vil_image:
+ image._width, image._height = vil_image.size
+ else:
+ try:
+ with PILImage.open(imgfile) as pil_image:
+ image._width, image._height = pil_image.size
+ image._transparent = easy_thumbnails.utils.is_transparent(pil_image)
+ except UnidentifiedImageError:
+ continue
+ image.save()
diff --git a/filer/management/commands/generate_thumbnails.py b/filer/management/commands/generate_thumbnails.py
new file mode 100644
index 000000000..64bf3df2f
--- /dev/null
+++ b/filer/management/commands/generate_thumbnails.py
@@ -0,0 +1,28 @@
+from django.core.management.base import BaseCommand
+
+from filer.models.imagemodels import Image
+
+
+class Command(BaseCommand):
+
+ def handle(self, *args, **options):
+ """
+ Generates image thumbnails
+
+ NOTE: To keep memory consumption stable avoid iteration over the Image queryset
+ """
+ pks = Image.objects.all().values_list('id', flat=True)
+ total = len(pks)
+ for idx, pk in enumerate(pks):
+ image = None
+ try:
+ image = Image.objects.get(pk=pk)
+ self.stdout.write(u'Processing image {0} / {1} {2}'.format(idx + 1, total, image))
+ self.stdout.flush()
+ image.thumbnails
+ image.icons
+ except IOError as e:
+ self.stderr.write('Failed to generate thumbnails: {0}'.format(str(e)))
+ self.stderr.flush()
+ finally:
+ del image
diff --git a/filer/migrations/0008_thumbnailoption_alter_image_options_and_more.py b/filer/migrations/0008_thumbnailoption_alter_image_options_and_more.py
new file mode 100644
index 000000000..f6196990c
--- /dev/null
+++ b/filer/migrations/0008_thumbnailoption_alter_image_options_and_more.py
@@ -0,0 +1,137 @@
+# Generated by Django 5.1.15 on 2026-04-30 04:52
+
+import django.db.models.deletion
+import filer.fields.multistorage_file
+import filer.models.filemodels
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('auth', '0012_alter_user_first_name_max_length'),
+ ('contenttypes', '0002_remove_content_type_name'),
+ ('filer', '0007_filer_file_size'),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ThumbnailOption',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(max_length=100, verbose_name='name')),
+ ('width', models.IntegerField(help_text='width in pixel.', verbose_name='width')),
+ ('height', models.IntegerField(help_text='height in pixel.', verbose_name='height')),
+ ('crop', models.BooleanField(default=True, verbose_name='crop')),
+ ('upscale', models.BooleanField(default=True, verbose_name='upscale')),
+ ],
+ options={
+ 'verbose_name': 'thumbnail option',
+ 'verbose_name_plural': 'thumbnail options',
+ 'ordering': ('width', 'height'),
+ },
+ ),
+ migrations.AlterModelOptions(
+ name='image',
+ options={'default_manager_name': 'objects', 'verbose_name': 'image', 'verbose_name_plural': 'images'},
+ ),
+ migrations.RemoveField(
+ model_name='image',
+ name='default_credit',
+ ),
+ migrations.AddField(
+ model_name='file',
+ name='mime_type',
+ field=models.CharField(default='application/octet-stream', help_text='MIME type of uploaded content', max_length=255, validators=[filer.models.filemodels.mimetype_validator]),
+ ),
+ migrations.AddField(
+ model_name='image',
+ name='_transparent',
+ field=models.BooleanField(default=False),
+ ),
+ migrations.AlterField(
+ model_name='file',
+ name='_file_size',
+ field=models.BigIntegerField(blank=True, null=True, verbose_name='file size'),
+ ),
+ migrations.AlterField(
+ model_name='file',
+ name='file',
+ field=filer.fields.multistorage_file.MultiStorageFileField(blank=True, db_index=True, max_length=1024, null=True, upload_to=filer.fields.multistorage_file.generate_filename_multistorage, verbose_name='file'),
+ ),
+ migrations.AlterField(
+ model_name='file',
+ name='owner',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='owned_%(class)ss', to=settings.AUTH_USER_MODEL, verbose_name='owner'),
+ ),
+ migrations.AlterField(
+ model_name='file',
+ name='polymorphic_ctype',
+ field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype'),
+ ),
+ migrations.AlterField(
+ model_name='folder',
+ name='level',
+ field=models.PositiveIntegerField(editable=False),
+ ),
+ migrations.AlterField(
+ model_name='folder',
+ name='lft',
+ field=models.PositiveIntegerField(editable=False),
+ ),
+ migrations.AlterField(
+ model_name='folder',
+ name='rght',
+ field=models.PositiveIntegerField(editable=False),
+ ),
+ migrations.AlterField(
+ model_name='image',
+ name='_height',
+ field=models.FloatField(blank=True, null=True),
+ ),
+ migrations.AlterField(
+ model_name='image',
+ name='_width',
+ field=models.FloatField(blank=True, null=True),
+ ),
+ migrations.AlterField(
+ model_name='image',
+ name='default_alt_text',
+ field=models.CharField(blank=True, max_length=255, null=True, verbose_name='default alt text'),
+ ),
+ migrations.AlterField(
+ model_name='image',
+ name='default_caption',
+ field=models.CharField(blank=True, max_length=255, null=True, verbose_name='default caption'),
+ ),
+ migrations.AlterField(
+ model_name='image',
+ name='file_ptr',
+ field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, related_name='%(app_label)s_%(class)s_file', serialize=False, to='filer.file'),
+ ),
+ migrations.AlterField(
+ model_name='image',
+ name='subject_location',
+ field=models.CharField(blank=True, default='', max_length=64, verbose_name='subject location'),
+ ),
+ migrations.CreateModel(
+ name='FolderPermission',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('type', models.SmallIntegerField(choices=[(0, 'all items'), (1, 'this item only'), (2, 'this item and all children')], default=0, verbose_name='type')),
+ ('everybody', models.BooleanField(default=False, verbose_name='everybody')),
+ ('can_read', models.SmallIntegerField(blank=True, choices=[(None, 'inherit'), (1, 'allow'), (0, 'deny')], default=None, null=True, verbose_name='can read')),
+ ('can_edit', models.SmallIntegerField(blank=True, choices=[(None, 'inherit'), (1, 'allow'), (0, 'deny')], default=None, null=True, verbose_name='can edit')),
+ ('can_add_children', models.SmallIntegerField(blank=True, choices=[(None, 'inherit'), (1, 'allow'), (0, 'deny')], default=None, null=True, verbose_name='can add children')),
+ ('folder', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='filer.folder', verbose_name='folder')),
+ ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='filer_folder_permissions', to='auth.group', verbose_name='group')),
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filer_folder_permissions', to=settings.AUTH_USER_MODEL, verbose_name='user')),
+ ],
+ options={
+ 'verbose_name': 'folder permission',
+ 'verbose_name_plural': 'folder permissions',
+ },
+ ),
+ ]
diff --git a/filer/models/__init__.py b/filer/models/__init__.py
index 1f406fa1d..05e3867af 100644
--- a/filer/models/__init__.py
+++ b/filer/models/__init__.py
@@ -1,8 +1,12 @@
-#-*- coding: utf-8 -*-
-from .mixins import *
-from .filemodels import *
-from .clipboardmodels import *
-from .imagemodels import *
-from .foldermodels import *
-from .virtualitems import *
-from .archivemodels import *
+from .clipboardmodels import * # noqa
+from .filemodels import * # noqa
+from .foldermodels import * # noqa
+from .imagemodels import * # noqa
+from .thumbnailoptionmodels import * # noqa
+from .virtualitems import * # noqa
+
+# PBS-specific: keep archive models for backward compatibility
+try:
+ from .archivemodels import * # noqa
+except ImportError:
+ pass
diff --git a/filer/models/abstract.py b/filer/models/abstract.py
new file mode 100644
index 000000000..e4345896f
--- /dev/null
+++ b/filer/models/abstract.py
@@ -0,0 +1,282 @@
+import logging
+
+from django.conf import settings
+from django.core.checks import Warning
+from django.core.checks import register as register_check
+from django.core.exceptions import ValidationError
+from django.db import models
+from django.utils.functional import cached_property
+from django.utils.translation import gettext_lazy as _
+
+import easy_thumbnails.utils
+from easy_thumbnails.VIL import Image as VILImage
+from PIL.Image import MAX_IMAGE_PIXELS
+
+from .. import settings as filer_settings
+from ..utils.compatibility import PILImage
+from ..utils.filer_easy_thumbnails import FilerThumbnailer
+from ..utils.pil_exif import get_exif_for_file
+from .filemodels import File
+
+
+logger = logging.getLogger(__name__)
+
+
+# We can never exceed the max pixel value set by Pillow's PIL Image MAX_IMAGE_PIXELS
+# as if we allow it, it will fail while thumbnailing (first in the admin thumbnails
+# and then in the page itself.
+# Refer this https://github.com/python-pillow/Pillow/blob/b723e9e62e4706a85f7e44cb42b3d838dae5e546/src/PIL/Image.py#L3148
+FILER_MAX_IMAGE_PIXELS = getattr(settings, "FILER_MAX_IMAGE_PIXELS", MAX_IMAGE_PIXELS)
+if MAX_IMAGE_PIXELS is not None:
+ FILER_MAX_IMAGE_PIXELS = min(FILER_MAX_IMAGE_PIXELS, MAX_IMAGE_PIXELS)
+
+
+@register_check()
+def max_pixel_setting_check(app_configs, **kwargs):
+ if not FILER_MAX_IMAGE_PIXELS:
+ return [
+ Warning(
+ "Both settings.FILER_MAX_IMAGE_PIXELS and PIL.Image.MAX_IMAGE_PIXELS are not set.",
+ hint="Set FILER_MAX_IMAGE_PIXELS to a positive integer value in your settings.py. "
+ "This setting is used to limit the maximum number of pixels an image can have "
+ "to protect your site from memory bombs.",
+ obj=settings,
+ )
+ ]
+ return []
+
+
+class BaseImage(File):
+ SIDEBAR_IMAGE_WIDTH = 210
+ DEFAULT_THUMBNAILS = {
+ 'admin_clipboard_icon': {'size': (32, 32), 'crop': True,
+ 'upscale': True},
+ 'admin_sidebar_preview': {'size': (SIDEBAR_IMAGE_WIDTH, 0), 'upscale': True},
+ 'admin_directory_listing_icon': {'size': (48, 48),
+ 'crop': True, 'upscale': True},
+ 'admin_tiny_icon': {'size': (32, 32), 'crop': True, 'upscale': True},
+ }
+ file_type = 'Image'
+ _icon = "image"
+
+ _height = models.FloatField(
+ null=True,
+ blank=True,
+ )
+
+ _width = models.FloatField(
+ null=True,
+ blank=True,
+ )
+
+ _transparent = models.BooleanField(
+ null=False,
+ default=False,
+ )
+
+ default_alt_text = models.CharField(
+ _("default alt text"),
+ max_length=255,
+ blank=True,
+ null=True,
+ )
+
+ default_caption = models.CharField(
+ _("default caption"),
+ max_length=255,
+ blank=True,
+ null=True,
+ )
+
+ subject_location = models.CharField(
+ _("subject location"),
+ max_length=64,
+ blank=True,
+ default='',
+ )
+
+ file_ptr = models.OneToOneField(
+ to='filer.File',
+ parent_link=True,
+ related_name='%(app_label)s_%(class)s_file',
+ on_delete=models.CASCADE,
+ )
+
+ class Meta:
+ app_label = 'filer'
+ verbose_name = _("image")
+ verbose_name_plural = _("images")
+ abstract = True
+ default_manager_name = 'objects'
+
+ @classmethod
+ def matches_file_type(cls, iname, ifile, mime_type):
+ # source: https://www.freeformatter.com/mime-types-list.html
+ from ..settings import IMAGE_MIME_TYPES
+ maintype, subtype = mime_type.split('/')
+ return maintype == 'image' and subtype in IMAGE_MIME_TYPES
+
+ def file_data_changed(self, post_init=False):
+ attrs_updated = super().file_data_changed(post_init=post_init)
+ if attrs_updated:
+ try:
+ try:
+ imgfile = self.file.file
+ except ValueError:
+ imgfile = self.file_ptr.file
+ imgfile.seek(0)
+ if self.mime_type == 'image/svg+xml':
+ self._width, self._height = VILImage.load(imgfile).size
+ self._transparent = True
+ else:
+ pil_image = PILImage.open(imgfile)
+ self._width, self._height = pil_image.size
+ self._transparent = easy_thumbnails.utils.is_transparent(pil_image)
+ imgfile.seek(0)
+ except Exception:
+ if post_init is False:
+ # in case `imgfile` could not be found, unset dimensions
+ # but only if not initialized by loading a fixture file
+ self._width, self._height = None, None
+ self._transparent = False
+ return attrs_updated
+
+ def clean(self):
+ # We check the Image size and calculate the pixel before
+ # the image gets attached to a folder and saved. We also
+ # send the error msg in the JSON and also post the message
+ # so that they know what is wrong with the image they uploaded
+ if not self.file or not FILER_MAX_IMAGE_PIXELS:
+ return
+
+ if self._width is None or self._height is None:
+ # If image size exceeds Pillow's max image size, Pillow will not return width or height
+ pixels = 2 * FILER_MAX_IMAGE_PIXELS + 1
+ aspect = 16 / 9
+ else:
+ width, height = max(1, self.width), max(1, self.height)
+ pixels: int = width * height
+ aspect: float = width / height
+ res_x: int = int((FILER_MAX_IMAGE_PIXELS * aspect) ** 0.5)
+ res_y: int = int(res_x / aspect)
+ if pixels > 2 * FILER_MAX_IMAGE_PIXELS:
+ msg = _(
+ "Image format not recognized or image size exceeds limit of %(max_pixels)d million "
+ "pixels by a factor of two or more. Before uploading again, check file format or resize "
+ "image to %(width)d x %(height)d resolution or lower."
+ ) % dict(max_pixels=FILER_MAX_IMAGE_PIXELS // 1000000, width=res_x, height=res_y)
+ raise ValidationError(str(msg), code="image_size")
+
+ if pixels > FILER_MAX_IMAGE_PIXELS:
+ msg = _(
+ "Image size (%(pixels)d million pixels) exceeds limit of %(max_pixels)d "
+ "million pixels. Before uploading again, resize image to %(width)d x %(height)d "
+ "resolution or lower."
+ ) % dict(pixels=pixels // 1000000, max_pixels=FILER_MAX_IMAGE_PIXELS // 1000000,
+ width=res_x, height=res_y)
+ raise ValidationError(str(msg), code="image_size")
+
+ def save(self, *args, **kwargs):
+ self.has_all_mandatory_data = self._check_validity()
+ super().save(*args, **kwargs)
+
+ def _check_validity(self):
+ if not self.name:
+ return False
+ return True
+
+ def sidebar_image_ratio(self):
+ if self.width:
+ return float(self.width) / float(self.SIDEBAR_IMAGE_WIDTH)
+ else:
+ return 1.0
+
+ @cached_property
+ def exif(self):
+ try:
+ return get_exif_for_file(self.file)
+ except Exception:
+ return {}
+
+ def has_edit_permission(self, request):
+ return self.has_generic_permission(request, 'edit')
+
+ def has_read_permission(self, request):
+ return self.has_generic_permission(request, 'read')
+
+ def has_add_children_permission(self, request):
+ return self.has_generic_permission(request, 'add_children')
+
+ def has_generic_permission(self, request, permission_type):
+ """
+ Return true if the current user has permission on this
+ image. Return the string 'ALL' if the user has all rights.
+ """
+ user = request.user
+ if not user.is_authenticated:
+ return False
+ elif user.is_superuser:
+ return True
+ elif user == self.owner:
+ return True
+ elif self.folder:
+ return self.folder.has_generic_permission(request, permission_type)
+ else:
+ return False
+
+ @property
+ def label(self):
+ if self.name in ['', None]:
+ return self.original_filename or 'unnamed file'
+ else:
+ return self.name
+
+ @property
+ def width(self):
+ return self._width or 0.0
+
+ @property
+ def height(self):
+ return self._height or 0.0
+
+ def _generate_thumbnails(self, required_thumbnails):
+ _thumbnails = {}
+ for name, opts in required_thumbnails.items():
+ try:
+ opts.update({'subject_location': self.subject_location})
+ thumb = self.file.get_thumbnail(opts)
+ _thumbnails[name] = thumb.url
+ except Exception as e:
+ # catch exception and manage it. We can re-raise it for debugging
+ # purposes and/or just logging it, provided user configured
+ # proper logging configuration
+ if filer_settings.FILER_ENABLE_LOGGING:
+ logger.error('Error while generating thumbnail: %s', e)
+ if filer_settings.FILER_DEBUG:
+ raise
+ return _thumbnails
+
+ @property
+ def icons(self):
+ required_thumbnails = {
+ size: {
+ 'size': (int(size), int(size)),
+ 'crop': True,
+ 'upscale': True,
+ 'subject_location': self.subject_location,
+ }
+ for size in filer_settings.FILER_ADMIN_ICON_SIZES}
+ return self._generate_thumbnails(required_thumbnails)
+
+ @property
+ def thumbnails(self):
+ return self._generate_thumbnails(BaseImage.DEFAULT_THUMBNAILS)
+
+ @property
+ def easy_thumbnails_thumbnailer(self):
+ tn = FilerThumbnailer(
+ file=self.file, name=self.file.name,
+ source_storage=self.file.source_storage,
+ thumbnail_storage=self.file.thumbnail_storage,
+ thumbnail_basedir=self.file.thumbnail_basedir)
+ return tn
diff --git a/filer/models/clipboardmodels.py b/filer/models/clipboardmodels.py
index bc846f072..cde011818 100644
--- a/filer/models/clipboardmodels.py
+++ b/filer/models/clipboardmodels.py
@@ -1,22 +1,36 @@
-#-*- coding: utf-8 -*-
+from django.conf import settings
from django.contrib.auth import models as auth_models
from django.db import models
from django.utils.translation import gettext_lazy as _
-from filer.models import filemodels
+
+from . import filemodels
class Clipboard(models.Model):
user = models.OneToOneField(
- auth_models.User, verbose_name=_('user'), related_name="filer_clipboard", on_delete=models.CASCADE
+ getattr(settings, 'AUTH_USER_MODEL', 'auth.User'),
+ verbose_name=_('user'),
+ related_name="filer_clipboard",
+ on_delete=models.CASCADE,
)
+
files = models.ManyToManyField(
- 'File', verbose_name=_('files'), related_name="in_clipboards",
- through='ClipboardItem')
+ 'File',
+ verbose_name=_('files'),
+ related_name="in_clipboards",
+ through='ClipboardItem',
+ )
+
+ # PBS-specific: folder_name used for clipboard upload paths
folder_name = "_clipboard"
+ class Meta:
+ app_label = 'filer'
+ verbose_name = _("clipboard")
+ verbose_name_plural = _("clipboards")
+
def append_file(self, file_obj):
try:
- # We have to check if file is already in the clipboard as otherwise polymorphic complains
self.files.get(pk=file_obj.pk)
return False
except filemodels.File.DoesNotExist:
@@ -30,19 +44,23 @@ def empty(self):
empty.alters_data = True
def __str__(self):
- return "Clipboard %s of %s" % (self.id, self.user)
-
- class Meta:
- app_label = 'filer'
- verbose_name = _('clipboard')
- verbose_name_plural = _('clipboards')
+ return f"Clipboard {self.id} of {self.user}"
class ClipboardItem(models.Model):
- file = models.ForeignKey('File', verbose_name=_('file'), on_delete=models.CASCADE)
- clipboard = models.ForeignKey(Clipboard, verbose_name=_('clipboard'), on_delete=models.CASCADE)
+ file = models.ForeignKey(
+ 'File',
+ verbose_name=_("file"),
+ on_delete=models.CASCADE,
+ )
+
+ clipboard = models.ForeignKey(
+ Clipboard,
+ verbose_name=_("clipboard"),
+ on_delete=models.CASCADE,
+ )
class Meta:
app_label = 'filer'
- verbose_name = _('clipboard item')
- verbose_name_plural = _('clipboard items')
+ verbose_name = _("clipboard item")
+ verbose_name_plural = _("clipboard items")
diff --git a/filer/models/filemodels.py b/filer/models/filemodels.py
index b26156eb4..4f00fe388 100644
--- a/filer/models/filemodels.py
+++ b/filer/models/filemodels.py
@@ -1,40 +1,45 @@
-#-*- coding: utf-8 -*-
import hashlib
+import mimetypes
import os
-import filer
import logging
+from datetime import datetime, timezone
+from django.conf import settings
from django.contrib.auth import models as auth_models
-from django.urls import reverse
-from django.core.files.base import ContentFile
from django.core.exceptions import ValidationError
-from django.db import (models, IntegrityError, transaction)
-from django.db.models import DEFERRED
+from django.core.files.base import ContentFile
+from django.db import models, IntegrityError, transaction
+from django.db.models import DEFERRED, Count
+from django.urls import NoReverseMatch, reverse
+from django.utils.functional import cached_property
+from django.utils import timezone as django_timezone
from django.utils.translation import gettext_lazy as _
-from filer.fields.multistorage_file import MultiStorageFileField
-from filer.models import mixins
-from filer.utils.cms_roles import *
-from filer.utils.files import matching_file_subtypes
-from filer import settings as filer_settings
-from django.db.models import Count
-from django.utils import timezone
-from polymorphic.models import PolymorphicModel
from polymorphic.managers import PolymorphicManager
+from polymorphic.models import PolymorphicModel
from polymorphic.query import PolymorphicQuerySet
-import hashlib
-import os
+
+from .. import settings as filer_settings
+from ..fields.multistorage_file import MultiStorageFileField
+from ..utils.cms_roles import (
+ get_sites_without_restriction_perm,
+ has_admin_role,
+ has_role_on_site,
+ can_restrict_on_site,
+)
+from ..utils.files import matching_file_subtypes
+from . import mixins
+
import filer
-import logging
logger = logging.getLogger(__name__)
def silence_error_if_missing_file(exception):
"""
- Ugly way of checking in an exception describes a 'missing file'.
+ Ugly way of checking if an exception describes a 'missing file'.
"""
- missing_files_errs = ('no such file', 'does not exist', )
+ missing_files_errs = ('no such file', 'does not exist',)
def find_msg_in_error(msg):
return msg in str(exception).lower()
@@ -44,7 +49,12 @@ def find_msg_in_error(msg):
class FileQuerySet(PolymorphicQuerySet):
+ def only(self, *fields):
+ fields = set(fields)
+ fields.update(["_file_size", "sha1", "is_public"])
+ return super().only(*fields)
+ # PBS-specific querysets
def readonly(self, user):
Folder = filer.models.foldermodels.Folder
return self.filter(folder__folder_type=Folder.CORE_FOLDER)
@@ -72,9 +82,7 @@ def unrestricted(self, user):
class FileManager(PolymorphicManager):
queryset_class = FileQuerySet
- # Proxy all unknown method calls to the queryset, so that its members are
- # directly accessible as PolymorphicModel.objects.*
- # Exclude any special functions (__) from this automatic proxying.
+ # Proxy all unknown method calls to the queryset
def __getattr__(self, name):
if name.startswith('__'):
return super(PolymorphicManager, self).__getattr__(self, name)
@@ -85,69 +93,145 @@ def find_all_duplicates(self):
for file_data in self.get_queryset().values('sha1').annotate(
count=Count('id')).filter(count__gt=1)}
+ def find_duplicates(self, file_obj):
+ return [i for i in self.exclude(pk=file_obj.pk).filter(sha1=file_obj.sha1)]
-class AliveFileManager(FileManager):
- # this is required in order to make sure that other models that are
- # related to filer files will get an DoesNotExist exception if the file
- # is in trash
+# PBS-specific managers for trash system
+class AliveFileManager(FileManager):
def get_queryset(self):
- return super(AliveFileManager, self).get_queryset().filter(
- deleted_at__isnull=True)
+ return super().get_queryset().filter(deleted_at__isnull=True)
class TrashFileManager(FileManager):
-
def get_queryset(self):
- return super(TrashFileManager, self).get_queryset().filter(
- deleted_at__isnull=False)
+ return super().get_queryset().filter(deleted_at__isnull=False)
-@mixins.trashable
-class File(PolymorphicModel,
- mixins.IconsMixin):
+def is_public_default():
+ # not using this setting directly as `is_public` default value
+ # so that Django doesn't generate new migrations upon setting change
+ return filer_settings.FILER_IS_PUBLIC_DEFAULT
- file_type = 'File'
- _icon = "file"
- folder = models.ForeignKey('filer.Folder', verbose_name=_('folder'), related_name='all_files',
- null=True, blank=True, on_delete=models.deletion.CASCADE)
- file = MultiStorageFileField(_('file'), null=True, blank=True, db_index=True, max_length=1024)
- _file_size = models.IntegerField(_('file size'), null=True, blank=True)
- sha1 = models.CharField(_('sha1'), max_length=40, blank=True, default='')
+def mimetype_validator(value):
+ if not mimetypes.guess_extension(value):
+ msg = "'{mimetype}' is not a recognized MIME-Type."
+ raise ValidationError(msg.format(mimetype=value))
- has_all_mandatory_data = models.BooleanField(_('has all mandatory data'), default=False, editable=False)
- original_filename = models.CharField(_('original filename'), max_length=255, blank=True, null=True)
+@mixins.trashable
+class File(PolymorphicModel, mixins.IconsMixin):
+ file_type = 'File'
+ _icon = 'file'
+ _file_data_changed_hint = None
+
+ folder = models.ForeignKey(
+ 'filer.Folder',
+ verbose_name=_("folder"),
+ related_name='all_files',
+ null=True,
+ blank=True,
+ on_delete=models.CASCADE,
+ )
+
+ file = MultiStorageFileField(
+ _("file"),
+ null=True,
+ blank=True,
+ db_index=True,
+ max_length=1024,
+ )
+
+ _file_size = models.BigIntegerField(
+ _("file size"),
+ null=True,
+ blank=True,
+ )
+
+ sha1 = models.CharField(
+ _("sha1"),
+ max_length=40,
+ blank=True,
+ default='',
+ )
+
+ has_all_mandatory_data = models.BooleanField(
+ _("has all mandatory data"),
+ default=False,
+ editable=False,
+ )
+
+ original_filename = models.CharField(
+ _("original filename"),
+ max_length=255,
+ blank=True,
+ null=True,
+ )
+
name = models.CharField(
- max_length=255, null=True, blank=True, verbose_name=_('file name'),
+ max_length=255,
+ null=True,
+ blank=True,
+ verbose_name=_("file name"),
help_text=_('Change the FILE name for an image in the cloud storage'
' system; be sure to include the extension '
'(.jpg or .png, for example) to ensure asset remains '
- 'valid.'))
+ 'valid.'),
+ )
+
title = models.CharField(
- max_length=255, null=True, blank=True, verbose_name=_('name'),
+ max_length=255,
+ null=True,
+ blank=True,
+ verbose_name=_("name"),
help_text=_('Used in the Photo Gallery plugin as a title or name for'
- ' an image; not displayed via the image plugin.'))
+ ' an image; not displayed via the image plugin.'),
+ )
+
description = models.TextField(
- null=True, blank=True, verbose_name=_('description'),
+ null=True,
+ blank=True,
+ verbose_name=_("description"),
help_text=_('Used in the Photo Gallery plugin as a description;'
- ' not displayed via the image plugin.'))
-
- owner = models.ForeignKey(auth_models.User,
- related_name='owned_%(class)ss', on_delete=models.SET_NULL,
- null=True, blank=True, verbose_name=_('owner'))
-
- uploaded_at = models.DateTimeField(_('uploaded at'), auto_now_add=True)
- modified_at = models.DateTimeField(_('modified at'), auto_now=True)
+ ' not displayed via the image plugin.'),
+ )
+
+ owner = models.ForeignKey(
+ getattr(settings, 'AUTH_USER_MODEL', 'auth.User'),
+ related_name='owned_%(class)ss',
+ on_delete=models.SET_NULL,
+ null=True,
+ blank=True,
+ verbose_name=_("owner"),
+ )
+
+ uploaded_at = models.DateTimeField(
+ _("uploaded at"),
+ auto_now_add=True,
+ )
+
+ modified_at = models.DateTimeField(
+ _("modified at"),
+ auto_now=True,
+ )
is_public = models.BooleanField(
default=filer_settings.FILER_IS_PUBLIC_DEFAULT,
- verbose_name=_('Permissions disabled'),
- help_text=_('Disable any permission checking for this ' +\
- 'file. File will be publicly accessible ' +\
- 'to anyone.'))
-
+ verbose_name=_("Permissions disabled"),
+ help_text=_("Disable any permission checking for this "
+ "file. File will be publicly accessible "
+ "to anyone."),
+ )
+
+ mime_type = models.CharField(
+ max_length=255,
+ help_text="MIME type of uploaded content",
+ validators=[mimetype_validator],
+ default='application/octet-stream',
+ )
+
+ # PBS-specific: restricted field
restricted = models.BooleanField(
_("Restrict Editors and Writers from being able to edit "
"or delete this asset"), default=False,
@@ -155,23 +239,27 @@ class File(PolymorphicModel,
'Editors and Writers will still be able to '
'view the asset, add it to a plugin or smart '
'snippet but will not be able to delete or '
- 'modify the current version of the asset.'))
+ 'modify the current version of the asset.'),
+ )
+ # PBS-specific: trash managers
objects = AliveFileManager()
trash = TrashFileManager()
all_objects = FileManager()
+ class Meta:
+ app_label = 'filer'
+ verbose_name = _("file")
+ verbose_name_plural = _("files")
+
@classmethod
def matches_file_type(cls, iname, ifile, request):
return True # I match all files...
def __init__(self, *args, **kwargs):
- super(File, self).__init__(*args, **kwargs)
- # Use __dict__ to avoid triggering deferred field loading
+ super().__init__(*args, **kwargs)
+ # PBS: Use __dict__ to avoid triggering deferred field loading
# which can cause recursion in Django 5.1+ (from_db calls __init__).
- # Django stores the DEFERRED sentinel in __dict__ for deferred fields
- # rather than omitting the key, so we must normalize it to a safe
- # default to avoid false positives in change-detection comparisons.
raw_is_public = self.__dict__.get('is_public', DEFERRED)
if raw_is_public is DEFERRED:
if self.pk is not None:
@@ -199,6 +287,40 @@ def __init__(self, *args, **kwargs):
raw_folder_id = self.__dict__.get('folder_id', DEFERRED)
self._old_folder_id = None if raw_folder_id is DEFERRED else raw_folder_id
+ @cached_property
+ def mime_maintype(self):
+ return self.mime_type.split('/')[0]
+
+ @cached_property
+ def mime_subtype(self):
+ return self.mime_type.split('/')[1]
+
+ def file_data_changed(self, post_init=False):
+ """
+ This is called whenever self.file changes (including initial set in __init__).
+ Returns True if data related attributes were updated, False otherwise.
+ """
+ if self._file_data_changed_hint is not None:
+ data_changed_hint = self._file_data_changed_hint
+ self._file_data_changed_hint = None
+ if not data_changed_hint:
+ return False
+ if post_init and self._file_size and self.sha1:
+ return False
+ try:
+ self._file_size = self.file.size
+ except: # noqa
+ self._file_size = None
+ try:
+ self.generate_sha1()
+ except Exception:
+ self.sha1 = ''
+ try:
+ self.mime_type = mimetypes.guess_type(self.file.name)[0] or 'application/octet-stream'
+ except Exception:
+ pass
+ return True
+
def clean(self):
if self.name:
self.name = self.name.strip()
@@ -213,7 +335,7 @@ def clean(self):
old_file_type = self.get_real_instance_class()
new_file_type = matching_file_subtypes(self.name, None, None)[0]
- if not old_file_type is new_file_type:
+ if old_file_type is not new_file_type:
supported_extensions = getattr(
old_file_type, '_filename_extensions', [])
if supported_extensions:
@@ -223,15 +345,15 @@ def clean(self):
', '.join(supported_extensions))
else:
err_msg = "Extension %s is not allowed for this file " \
- "type." % (extension, )
+ "type." % (extension,)
raise ValidationError(err_msg)
if self.folder:
entries = self.folder.entries_with_names([self.actual_name])
if entries and any(entry.pk != self.pk for entry in entries):
raise ValidationError(
- _('Current folder already contains a file named %s') % \
- self.actual_name)
+ _('Current folder already contains a file named %s') %
+ self.actual_name)
def _move_file(self):
"""
@@ -249,29 +371,21 @@ def _move_file(self):
dst_storage = self.file.storages['private']
# delete the thumbnail
- # We are toggling the is_public to make sure that easy_thumbnails can
- # delete the thumbnails
self.is_public = not self.is_public
self.file.delete_thumbnails()
self.is_public = not self.is_public
- # This is needed because most of the remote File Storage backend do not
- # open the file.
src_file = src_storage.open(src_file_name)
- src_file.open()
- self.file = dst_storage.save(dst_file_name,
- ContentFile(src_file.read(), name=os.path.basename(dst_file_name)))
- src_file.close()
+ with src_file.open() as f:
+ content_file = ContentFile(f.read())
+ self._file_data_changed_hint = False
+ self.file = dst_storage.save(dst_file_name, content_file)
src_storage.delete(src_file_name)
def _copy_file(self, destination, overwrite=False):
"""
Copies the file to a destination files and returns it.
"""
-
if overwrite:
- # If the destination file already exists default storage backend
- # does not overwrite it but generates another filename.
- # TODO: Find a way to override this behavior.
raise NotImplementedError
src_file_name = self._current_file_location
@@ -280,14 +394,10 @@ def _copy_file(self, destination, overwrite=False):
if hasattr(storage, 'copy'):
storage.copy(src_file_name, destination)
else:
- # This is needed because most of the remote File Storage backend do not
- # open the file.
src_file = storage.open(src_file_name)
src_file.open()
file_content = src_file.read()
src_file.close()
- # Delete existing file at destination to prevent Django's storage
- # from deduplicating the filename (appending random suffix).
if storage.exists(destination):
storage.delete(destination)
destination = storage.save(destination,
@@ -300,11 +410,15 @@ def _copy_file(self, destination, overwrite=False):
def generate_sha1(self):
sha = hashlib.sha1()
self.file.seek(0)
- sha.update(self.file.read())
+ while True:
+ buf = self.file.read(104857600)
+ if not buf:
+ break
+ sha.update(buf)
self.sha1 = sha.hexdigest()
- # to make sure later operations can read the whole file
self.file.seek(0)
+ # PBS-specific: set restricted from folder
def set_restricted_from_folder(self):
if self.folder and self.folder.restricted:
self.restricted = self.folder.restricted
@@ -314,14 +428,10 @@ def save(self, *args, **kwargs):
# check if this is a subclass of "File" or not and set
# _file_type_plugin_name
if self.__class__ == File:
- # what should we do now?
- # maybe this has a subclass, but is being saved as a File instance
- # anyway. do we need to go check all possible subclasses?
pass
elif issubclass(self.__class__, File):
self._file_type_plugin_name = self.__class__.__name__
# cache the file size
- # TODO: only do this if needed (depending on the storage backend the whole file will be downloaded)
try:
self._file_size = self.file.size
except:
@@ -331,19 +441,18 @@ def save(self, *args, **kwargs):
self._old_is_public = self.is_public
# generate SHA1 hash
- # TODO: only do this if needed (depending on the storage backend the whole file will be downloaded)
try:
self.generate_sha1()
- except (IOError, TypeError, ValueError) as e:
+ except (IOError, TypeError, ValueError):
pass
replaced_file = self._old_sha1 != self.sha1
if filer_settings.FOLDER_AFFECTS_URL and (self._is_path_changed() or replaced_file):
if replaced_file and not self._is_name_changed():
- self.name = None # if new file submitted for same id we overwrite what was previously in name
+ self.name = None
self._force_commit = True
self.update_location_on_storage(*args, **kwargs)
else:
- super(File, self).save(*args, **kwargs)
+ super().save(*args, **kwargs)
save.alters_data = True
@@ -356,18 +465,13 @@ def _is_name_changed(self):
def _is_path_changed(self):
"""
Used to detect if file location on storage should be updated or not.
- Since this is used only to check if location should be updated,
- the values will be reset after the file is copied in the
- destination location on storage.
"""
- # check if file name changed
if self._old_name in ('', None):
name_changed = self.name not in ('', None)
else:
name_changed = self._old_name != self.name
folder_changed = self._old_folder_id != getattr(self.folder, 'id', None)
-
return name_changed or folder_changed
def _delete_thumbnails(self):
@@ -378,13 +482,8 @@ def _delete_thumbnails(self):
def update_location_on_storage(self, *args, **kwargs):
old_location = self._current_file_location
- # thumbnails might get physically deleted evenif the transaction fails
- # though luck... they get re-created anyway...
self._delete_thumbnails()
- # check if file content has changed
if self._old_sha1 != self.sha1:
- # actual file content needs to be replaced on storage prior to
- # filer file instance save
self.file.storage.save(self._current_file_location, self.file)
self._old_sha1 = self.sha1
new_location = self.file.field.upload_to(self, self.upload_to_name)
@@ -399,49 +498,24 @@ def copy_and_save():
if self._force_commit:
try:
with transaction.atomic(savepoint=False):
- # The manual transaction management here breaks the transaction management
- # from django.contrib.admin.options.ModelAdmin.change_view
- # This isn't a big problem because the only CRUD operation done afterwards
- # is an insertion in django_admin_log. If this method rollbacks the transaction
- # then we will have an entry in the admin log describing an action
- # that didn't actually finish succesfull.
- # This 'hack' can be removed once django adds support for on_commit and
- # on_rollback hooks (see: https://code.djangoproject.com/ticket/14051)
copy_and_save()
except:
- # delete the file from new_location if the db update failed
if old_location != new_location:
storage.delete(new_location)
raise
else:
- # only delete the file on the old_location if all went OK
if old_location != new_location:
storage.delete(old_location)
else:
copy_and_save()
return new_location
+ # PBS-specific: soft delete / trash system
def soft_delete(self, *args, **kwargs):
"""
- This method works as a default delete action of a filer file.
- It will not actually delete the item from the database, instead it
- will make it inaccessible for the default manager.
- It just `fakes` a deletion by doing the following:
- 1. sets a deletion time that will be used to distinguish
- `alive` and `trashed` filer files.
- 2. makes a copy of the actual file on storage and saves it to
- a trash location on storage. Also tries to ignore if the
- actual file is missing from storage.
- 3. updates only the filer file path in the database (no model
- save is done since it tries to bypass the logic defined
- in the save method)
- 4. deletes the file(and all it's thumbnails) from the
- original location if no other filer files are referencing
- it.
- All the metadata of this filer file will remain intact.
+ Soft-delete: moves file to trash location on storage.
"""
- deletion_time = kwargs.pop('deletion_time', timezone.now())
- # move file to a `trash` location
+ deletion_time = kwargs.pop('deletion_time', django_timezone.now())
to_trash = filer.utils.generate_filename.get_trash_path(self)
old_location, new_location = self.file.name, None
try:
@@ -452,41 +526,32 @@ def soft_delete(self, *args, **kwargs):
logger.error('Error while trying to copy file: %s to %s.' % (
old_location, to_trash), e)
else:
- # if there are no more references to the file on storage delete it
- # and all its thumbnails
if not File.objects.exclude(pk=self.pk).filter(
file=old_location, is_public=self.is_public).exists():
self.file.delete(False)
finally:
- # even if `copy_file` fails, user is trying to delete this file so
- # in worse case scenario this file is not restorable
new_location = new_location or to_trash
File.objects.filter(pk=self.pk).update(
deleted_at=deletion_time, file=new_location)
-
self.deleted_at = deletion_time
self.file = new_location
def hard_delete(self, *args, **kwargs):
"""
- This method deletes the filer file from the database and from storage.
+ Hard-delete: removes from DB and storage.
"""
- # delete the model before deleting the file from storage
- super(File, self).delete(*args, **kwargs)
- # delete the actual file from storage and all its thumbnails
- # if there are no other filer files referencing it.
+ super().delete(*args, **kwargs)
if not File.objects.filter(file=self.file.name,
is_public=self.is_public).exists():
self.file.delete(False)
def delete(self, *args, **kwargs):
- super(File, self).delete_restorable(*args, **kwargs)
+ super().delete_restorable(*args, **kwargs)
delete.alters_data = True
def _set_valid_name_for_restore(self):
"""
- Generates the first available name so this file
- can be restored in the folder.
+ Generates the first available name for restore.
"""
basename, extension = os.path.splitext(self.clean_actual_name)
if self.folder:
@@ -505,7 +570,6 @@ def _set_valid_name_for_restore(self):
i = 1
while self.clean_actual_name in existing_file_names:
filename = "%s_%s%s" % (basename, i, extension)
- # set actual name
if self.name in ('', None):
self.original_filename = filename
else:
@@ -514,9 +578,7 @@ def _set_valid_name_for_restore(self):
def restore(self):
"""
- Restores the file to its folder location.
- If there's already an existing file with the same name, it will
- generate a new filename.
+ Restores the file to its folder location.
"""
if self.folder_id:
Folder = filer.models.foldermodels.Folder
@@ -526,7 +588,6 @@ def restore(self):
self.folder = Folder.trash.get(id=self.folder_id)
self.folder.restore_path()
- # at this point this file's folder should be `alive`
self.folder = filer.models.Folder.objects.get(id=self.folder_id)
old_location, new_location = self.file.name, None
@@ -548,7 +609,6 @@ def restore(self):
name=self.name, original_filename=self.original_filename)
self.deleted_at = None
self.file.name = new_location
- # restore to user clipboard
if self.owner_id and not self.folder_id:
try:
clipboard = filer.models.tools.get_user_clipboard(self.owner)
@@ -556,21 +616,28 @@ def restore(self):
except auth_models.User.DoesNotExist:
pass
+ def __str__(self):
+ try:
+ name = self.pretty_logical_path
+ except:
+ name = self.actual_name
+ return name
+
@property
def label(self):
if self.name in ['', None]:
text = self.original_filename or 'unnamed file'
else:
text = self.name
- text = "%s" % (text,)
- return text
+ return f"{text}"
def _cmp(self, a, b):
- return (a > b) - (a < b)
+ return (a > b) - (a < b)
def __lt__(self, other):
return self._cmp(self.label.lower(), other.label.lower()) < 0
+ # PBS-specific: hash-based actual_name
@property
def actual_name(self):
if not self.sha1:
@@ -604,11 +671,7 @@ def upload_to_name(self):
@property
def clean_actual_name(self):
- """The name displayed to the user.
- Uses self.name if set, otherwise it falls back on self.original_filename.
-
- This property is used for enforcing unique filenames within the same folder.
- """
+ """The name displayed to the user."""
if self.name in ('', None):
name = "%s" % (self.original_filename,)
else:
@@ -625,24 +688,50 @@ def pretty_logical_path(self):
full_path = '{}{}{}'.format(directory_path, os.sep, self.actual_name)
return full_path
- def __str__(self):
- try:
- name = self.pretty_logical_path
- except:
- name = self.actual_name
- return name
+ # Upstream: permission methods
+ def has_edit_permission(self, request):
+ return request.user.has_perm("filer.change_file") and self.has_generic_permission(request, 'edit')
- def get_admin_url_path(self):
+ def has_read_permission(self, request):
+ return self.has_generic_permission(request, 'read')
+
+ def has_add_children_permission(self, request):
+ return request.user.has_perm("filer.add_file") and self.has_generic_permission(request, 'add_children')
+
+ def has_generic_permission(self, request, permission_type):
+ user = request.user
+ if not user.is_authenticated:
+ return False
+ elif user.is_superuser:
+ return True
+ elif user == self.owner:
+ return True
+ elif self.folder:
+ return self.folder.has_generic_permission(request, permission_type)
+ else:
+ return False
+
+ def get_admin_url(self, action):
return reverse(
- 'admin:%s_%s_change' % (self._meta.app_label,
- self._meta.model_name,),
+ 'admin:{}_{}_{}'.format(
+ self._meta.app_label,
+ self._meta.model_name,
+ action
+ ),
args=(self.pk,)
)
+ def get_admin_url_path(self):
+ return self.get_admin_url("change")
+
+ def get_admin_change_url(self):
+ return self.get_admin_url("change")
+
+ def get_admin_expand_view_url(self):
+ return self.get_admin_url("expand")
+
def get_admin_delete_url(self):
- return reverse(
- 'admin:{0}_{1}_delete'.format(self._meta.app_label, self._meta.model_name,),
- args=(self.pk,))
+ return self.get_admin_url("delete")
@property
def url(self):
@@ -651,15 +740,35 @@ def url(self):
"""
try:
r = self.file.url
- except:
+ except: # noqa
r = ''
return r
+ @property
+ def canonical_time(self):
+ if settings.USE_TZ:
+ return int((self.uploaded_at - datetime(1970, 1, 1, 1, tzinfo=timezone.utc)).total_seconds())
+ else:
+ return int((self.uploaded_at - datetime(1970, 1, 1, 1)).total_seconds())
+
+ @property
+ def canonical_url(self):
+ url = ''
+ if self.file and self.is_public:
+ try:
+ url = reverse('canonical', kwargs={
+ 'uploaded_at': self.canonical_time,
+ 'file_id': self.id
+ })
+ except NoReverseMatch:
+ pass
+ return url
+
@property
def path(self):
try:
return self.file.path
- except:
+ except: # noqa
return ""
@property
@@ -675,10 +784,6 @@ def extension(self):
@property
def logical_folder(self):
- """
- if this file is not in a specific folder return the Special "unfiled"
- Folder object
- """
if not self.folder:
from filer.models.virtualitems import UnfiledImages
return UnfiledImages()
@@ -687,10 +792,6 @@ def logical_folder(self):
@property
def logical_path(self):
- """
- Gets logical path of the folder in the tree structure.
- Used to generate breadcrumbs
- """
folder_path = []
if self.folder:
folder_path.extend(self.folder.get_ancestors())
@@ -701,6 +802,7 @@ def logical_path(self):
def duplicates(self):
return list(File.objects.find_duplicates(self))
+ # PBS-specific: site/core permission methods
def is_core(self):
if self.folder:
return self.folder.is_core()
@@ -718,21 +820,14 @@ def is_restricted_for_user(self, user):
not can_restrict_on_site(user, self.folder.site)))
def can_change_restricted(self, user):
- """
- Checks if restriction operation is available for this file.
- """
perm = 'filer.can_restrict_operations'
if not user.has_perm(perm, self) and not user.has_perm(perm):
return False
if not self.folder:
- # cannot restrict unfiled files
return False
-
if not can_restrict_on_site(user, self.folder.site):
return False
-
if self.folder.restricted == self.restricted == True:
- # only parent can be set to True
return False
if self.folder.restricted == self.restricted == False:
return True
@@ -744,44 +839,26 @@ def can_change_restricted(self, user):
def has_change_permission(self, user):
if not self.folder:
- # clipboard and unfiled files
return True
-
if self.is_readonly_for_user(user):
- # nobody can change core folder
- # leaving these on True based on the fact that core folders are
- # displayed as readonly fields
return True
-
- # only admins can change site folders with no site owner
if not self.folder.site and has_admin_role(user):
return True
-
if self.folder.site:
can_change_file = (user.has_perm('filer.change_file', self) or
user.has_perm('filer.change_file'))
return can_change_file and has_role_on_site(user, self.folder.site)
-
return False
def has_delete_permission(self, user):
if not self.folder:
- # clipboard and unfiled files
return True
- # nobody can delete core files
if self.is_readonly_for_user(user):
return False
- # only admins can delete site files with no site owner
if not self.folder.site and has_admin_role(user):
return True
-
if self.folder.site:
can_delete_file = (user.has_perm('filer.delete_file', self) or
user.has_perm('filer.delete_file'))
return can_delete_file and has_role_on_site(user, self.folder.site)
return False
-
- class Meta:
- app_label = 'filer'
- verbose_name = _('file')
- verbose_name_plural = _('files')
diff --git a/filer/models/foldermodels.py b/filer/models/foldermodels.py
index 641ef07c2..e7fde2718 100644
--- a/filer/models/foldermodels.py
+++ b/filer/models/foldermodels.py
@@ -1,23 +1,103 @@
-#-*- coding: utf-8 -*-
-from django.contrib.sites.models import Site
+import itertools
+import logging
+
+from django.conf import settings
from django.contrib.auth import models as auth_models
-from django.urls import reverse
+from django.contrib.sites.models import Site
from django.core.exceptions import ValidationError
-from django.db import (models, IntegrityError, transaction)
-from django.db.models import (query, Q, signals, DEFERRED)
+from django.db import models, IntegrityError, transaction
+from django.db.models import Q, query, signals, DEFERRED
from django.dispatch import receiver
+from django.urls import reverse
+from django.utils.functional import cached_property
+from django.utils.html import format_html, format_html_join
+from django.utils.translation import gettext
from django.utils.translation import gettext_lazy as _
-from urllib.parse import quote
-from filer.utils.cms_roles import *
-from filer.models import mixins
-from filer import settings as filer_settings
from django.utils import timezone
+from urllib.parse import quote
+
import mptt
-import itertools
+
+from .. import settings as filer_settings
+from ..cache import get_folder_permission_cache, update_folder_permission_cache
+from ..utils.cms_roles import (
+ get_sites_for_user,
+ get_sites_without_restriction_perm,
+ has_admin_role,
+ has_admin_role_on_site,
+ has_role_on_site,
+ can_restrict_on_site,
+)
+from . import mixins
+
import filer
-class FoldersChainableQuerySetMixin(object):
+logger = logging.getLogger(__name__)
+
+
+class FolderPermissionManager(models.Manager):
+ """
+ These methods are called by introspection from "has_generic_permission" on
+ the folder model.
+ """
+ def get_read_id_list(self, user):
+ return self.__get_id_list(user, "can_read")
+
+ def get_edit_id_list(self, user):
+ return self.__get_id_list(user, "can_edit")
+
+ def get_add_children_id_list(self, user):
+ return self.__get_id_list(user, "can_add_children")
+
+ def __get_id_list(self, user, attr):
+ if user.is_superuser or not filer_settings.FILER_ENABLE_PERMISSIONS:
+ return 'All'
+ cached_id_list = get_folder_permission_cache(user, attr)
+ if cached_id_list:
+ return cached_id_list
+
+ allow_list = set()
+ deny_list = set()
+ group_ids = user.groups.all().values_list('id', flat=True)
+ q = Q(user=user) | Q(group__in=group_ids) | Q(everybody=True)
+ perms = self.filter(q)
+
+ for perm in perms:
+ p = getattr(perm, attr)
+
+ if p is None:
+ continue
+
+ if not perm.folder:
+ assert perm.type == FolderPermission.ALL
+
+ if p == FolderPermission.ALLOW:
+ allow_list.update(Folder.objects.all().values_list('id', flat=True))
+ else:
+ deny_list.update(Folder.objects.all().values_list('id', flat=True))
+ continue
+
+ folder_id = perm.folder.id
+
+ if p == FolderPermission.ALLOW:
+ allow_list.add(folder_id)
+ else:
+ deny_list.add(folder_id)
+
+ if perm.type in [FolderPermission.ALL, FolderPermission.CHILDREN]:
+ if p == FolderPermission.ALLOW:
+ allow_list.update(perm.folder.get_descendants_ids())
+ else:
+ deny_list.update(perm.folder.get_descendants_ids())
+
+ id_list = allow_list - deny_list
+ update_folder_permission_cache(user, attr, id_list)
+ return id_list
+
+
+# PBS-specific: chainable queryset mixin with trash/restriction support
+class FoldersChainableQuerySetMixin:
def with_bad_metadata(self):
return self.filter(has_all_mandatory_data=False)
@@ -54,10 +134,8 @@ def restricted_descendants(self, user):
descendant_filter |= q
if not descendant_filter:
return self.none()
- # since this method is called to check permissions on descendants it
- # should only query the alive assets
restr_q = Q(Q(restricted=True) | Q(
- Q(all_files__restricted=True) & \
+ Q(all_files__restricted=True) &
Q(all_files__deleted_at__isnull=True)))
restr_q &= Q(site__in=sites)
return self.model.objects.filter(
@@ -76,8 +154,7 @@ def alive(self):
return self.filter(deleted_at__isnull=True)
-class FolderQueryset(query.QuerySet,
- FoldersChainableQuerySetMixin):
+class FolderQueryset(query.QuerySet, FoldersChainableQuerySetMixin):
pass
@@ -93,16 +170,11 @@ def __getattr__(self, name):
class AliveFolderManager(FolderManager):
- # this is required in order to make sure that other models that are
- # related to filer folders will get an DoesNotExist exception if the
- # folder is in trash
-
def get_queryset(self):
return FolderQueryset(self.model, using=self._db).alive()
class TrashFolderManager(FolderManager):
-
def get_queryset(self):
return FolderQueryset(self.model, using=self._db).in_trash()
@@ -118,12 +190,12 @@ class Folder(models.Model, mixins.IconsMixin):
in this way. Make sure the linked models obey the AbstractFile interface
(Duck Type).
"""
-
file_type = 'Folder'
is_root = False
can_have_subfolders = True
_icon = 'plainfolder'
+ # PBS-specific: folder types
SITE_FOLDER = 0
CORE_FOLDER = 1
@@ -132,58 +204,113 @@ class Folder(models.Model, mixins.IconsMixin):
CORE_FOLDER: 'Core Folder',
}
- parent = models.ForeignKey('self', verbose_name=('parent'), null=True,
- blank=True, related_name='children', on_delete=models.CASCADE)
- name = models.CharField(_('name'), max_length=255)
-
- owner = models.ForeignKey(auth_models.User, verbose_name=('owner'),
- related_name='filer_owned_folders',
- on_delete=models.SET_NULL,
- null=True, blank=True)
-
- uploaded_at = models.DateTimeField(_('uploaded at'), auto_now_add=True)
-
- created_at = models.DateTimeField(_('created at'), auto_now_add=True)
- modified_at = models.DateTimeField(_('modified at'), auto_now=True)
-
- folder_type = models.IntegerField(choices=list(FOLDER_TYPES.items()),
- default=SITE_FOLDER)
-
- site = models.ForeignKey(Site, null=True, blank=True,
- on_delete=models.SET_NULL,
- help_text=_("Select the site which will use "
- "this folder."))
+ parent = models.ForeignKey(
+ 'self',
+ verbose_name=_('parent'),
+ null=True,
+ blank=True,
+ related_name='children',
+ on_delete=models.CASCADE,
+ )
+
+ name = models.CharField(
+ _('name'),
+ max_length=255,
+ )
+
+ owner = models.ForeignKey(
+ getattr(settings, 'AUTH_USER_MODEL', 'auth.User'),
+ verbose_name=_('owner'),
+ related_name='filer_owned_folders',
+ on_delete=models.SET_NULL,
+ null=True,
+ blank=True,
+ )
+
+ uploaded_at = models.DateTimeField(
+ _('uploaded at'),
+ auto_now_add=True,
+ )
+
+ created_at = models.DateTimeField(
+ _('created at'),
+ auto_now_add=True,
+ )
+
+ modified_at = models.DateTimeField(
+ _('modified at'),
+ auto_now=True,
+ )
+
+ # PBS-specific fields
+ folder_type = models.IntegerField(
+ choices=list(FOLDER_TYPES.items()),
+ default=SITE_FOLDER,
+ )
+
+ site = models.ForeignKey(
+ Site,
+ null=True,
+ blank=True,
+ on_delete=models.SET_NULL,
+ help_text=_("Select the site which will use this folder."),
+ )
restricted = models.BooleanField(
_("Restrict Editors and Writers from being able to edit "
- "or delete anything from this folder"), default=False,
+ "or delete anything from this folder"),
+ default=False,
help_text=_('If this box is checked, '
'Editors and Writers will still be able to '
'view this folder assets, add them to a plugin or smart '
'snippet but will not be able to delete or '
- 'modify the current version of the assets.'))
+ 'modify the current version of the assets.'),
+ )
- shared = models.ManyToManyField(Site, blank=True,
+ shared = models.ManyToManyField(
+ Site,
+ blank=True,
related_name='shared',
verbose_name=_("Share folder with sites"),
help_text=_("All the sites which you share this folder with will "
"be able to use this folder on their pages, with all of "
"its assets. However, they will not be able to change, "
- "delete or move it, not even add new assets."))
+ "delete or move it, not even add new assets."),
+ )
+ # PBS-specific: trash managers
objects = AliveFolderManager()
trash = TrashFolderManager()
all_objects = FolderManager()
+ class Meta:
+ ordering = ('name',)
+ permissions = (
+ ("can_use_directory_listing", "Can use directory listing"),
+ ("can_restrict_operations", "Can restrict files or folders"),
+ )
+ app_label = 'filer'
+ verbose_name = _("Folder")
+ verbose_name_plural = _("Folders")
+
def __init__(self, *args, **kwargs):
- super(Folder, self).__init__(*args, **kwargs)
+ super().__init__(*args, **kwargs)
if self.__dict__.get('name', DEFERRED) is not DEFERRED:
self._old_name = self.name
if self.__dict__.get('parent_id', DEFERRED) is not DEFERRED:
self._old_parent_id = self.parent_id
- def clean(self):
+ def __str__(self):
+ try:
+ name = self.pretty_logical_path
+ except:
+ name = self.name
+ return name
+
+ def __repr__(self):
+ return f'<{self.__class__.__name__}(pk={self.pk}): {self.name}>'
+ def clean(self):
if self.name == filer.models.clipboardmodels.Clipboard.folder_name:
raise ValidationError(
_('%s is reserved for internal use. '
@@ -196,8 +323,7 @@ def clean(self):
parent=self.parent_id,
name=self.name)
if self.pk:
- duplicate_folders_q = duplicate_folders_q.exclude(
- pk=self.pk)
+ duplicate_folders_q = duplicate_folders_q.exclude(pk=self.pk)
if duplicate_folders_q.exists():
raise ValidationError(
@@ -206,24 +332,16 @@ def clean(self):
if not self.parent:
if (self.folder_type == Folder.SITE_FOLDER and
- not self.site):
+ not self.site):
raise ValidationError('Folder is a Site folder. '
'Site is required.')
if (self.folder_type == Folder.CORE_FOLDER and not self.parent and
- self.site):
+ self.site):
raise ValidationError('Folder is a Core folder. '
'Site must be empty.')
def set_metadata_from_parent(self):
- """
- This will keep the rules:
- * site for site folders can be changed only for the folders
- with no parent(root folders)
- * core folders should not have any site
- * if parent restricted keep restriction from parent
- """
if self.parent:
- # site folders - make sure it keeps the site from parent
self.site = self.parent.site
self.folder_type = self.parent.folder_type
if self.parent.restricted:
@@ -238,7 +356,6 @@ def has_new_metadata_value(self):
if not self.pk:
return True
metadata_fields = ['restricted', 'site_id', 'folder_type']
- # metadata should be preserved for trashed folder too
old_metadata = self.__class__.all_objects.\
filter(pk=self.pk).values(*metadata_fields).get()
for field in metadata_fields:
@@ -251,10 +368,6 @@ def is_affecting_file_paths(self):
self._old_parent_id != getattr(self, 'parent_id', None))
def update_descendants_metadata(self):
- """
- Folder type and restriction should be preserved
- to all descendants
- """
descendants = None
if self._update_descendants:
descendants = self.get_descendants()
@@ -282,7 +395,7 @@ def update_descendants_metadata(self):
def save(self, *args, **kwargs):
if not filer_settings.FOLDER_AFFECTS_URL:
self.set_metadata_from_parent()
- super(Folder, self).save(*args, **kwargs)
+ super().save(*args, **kwargs)
self.update_descendants_metadata()
return
@@ -297,12 +410,11 @@ def delete_from_locations(locations, storages):
try:
with transaction.atomic(savepoint=False):
self.set_metadata_from_parent()
- super(Folder, self).save(*args, **kwargs)
+ super().save(*args, **kwargs)
self.update_descendants_metadata()
if self.is_affecting_file_paths():
desc_ids = list(self.get_descendants(
include_self=True).values_list('id', flat=True))
- # update location only for alive files
file_mgr = filer.models.filemodels.File.objects
all_files = file_mgr.filter(folder__in=desc_ids)
for f in all_files:
@@ -318,34 +430,29 @@ def delete_from_locations(locations, storages):
else:
delete_from_locations(old_locations, storages)
+ # PBS-specific: trash methods
def soft_delete(self):
deletion_time = timezone.now()
desc_ids = list(self.get_descendants(
include_self=True).values_list('id', flat=True))
- # soft delete all alive files
file_mgr = filer.models.filemodels.File.objects
files_qs = file_mgr.filter(folder__in=desc_ids)
for filer_file in files_qs:
filer_file.soft_delete(deletion_time=deletion_time)
- # soft delete all alive folders
Folder.objects.filter(
id__in=desc_ids).update(deleted_at=deletion_time)
self.deleted_at = deletion_time
def hard_delete(self):
- # This would happen automatically by ways of the delete
- # cascade, but then the individual .delete() methods
- # won't be called and the files won't be deleted
- # from the filesystem.
desc_ids = list(self.get_descendants(
include_self=True).values_list('id', flat=True))
file_mgr = filer.models.filemodels.File.all_objects
for file_obj in file_mgr.filter(folder__in=desc_ids):
file_obj.hard_delete()
- super(Folder, self).delete()
+ super().delete()
def delete(self, *args, **kwargs):
- super(Folder, self).delete_restorable(*args, **kwargs)
+ super().delete_restorable(*args, **kwargs)
delete.alters_data = True
def _generate_valid_name_for_restore(self):
@@ -358,12 +465,6 @@ def _generate_valid_name_for_restore(self):
return name
def restore_path(self):
- """
- This method makes this folder path to be a valid destination for
- for restoring files/sub-folders.
- * it restores all the trashed folders in this folder's path.
- * files from the folders in path will not be restored.
- """
trashed_ancestors = self.get_ancestors(include_self=True).filter(
deleted_at__isnull=False)
first_node_trashed = trashed_ancestors[:1]
@@ -376,11 +477,7 @@ def restore_path(self):
trashed_ancestors.update(deleted_at=None)
def restore(self):
- """
- Restores all files and subfolders contained in this folder.
- """
self.restore_path()
- # add self since it was restored with restore_path method
desc_ids = [self.id]
descendants = self.get_descendants(include_self=True).filter(
deleted_at__isnull=False)
@@ -389,7 +486,6 @@ def restore(self):
Folder.trash.filter(id=descendant.id).update(
deleted_at=None, name=new_name)
desc_ids.append(descendant.id)
- # restore self and descendants files
file_mgr = filer.models.filemodels.File.trash
files_qs = file_mgr.filter(folder__in=desc_ids)
for filer_file in files_qs:
@@ -434,9 +530,6 @@ def files(self):
return filer.models.File.objects.filter(folder=self)
def entries_with_names(self, names):
- """Returns an iterator yielding the files and folders that are direct
- children of this folder and have their names in the given list of names.
- """
q = Q(name__in=names)
q |= Q(original_filename__in=names) & (Q(name__isnull=True) | Q(name=''))
files_with_names = filer.models.File.objects.filter(
@@ -446,21 +539,22 @@ def entries_with_names(self, names):
return list(itertools.chain(files_with_names, folders_with_names))
def pretty_path_entries(self):
- """Returns a list of all the descendant's `alive` entries logical path"""
subdirs = self.get_descendants(include_self=True).filter(
deleted_at__isnull=True)
subdir_files = filer.models.File.objects.filter(folder__in=subdirs)
file_paths = [x.pretty_logical_path for x in subdir_files]
dir_paths = [x.pretty_logical_path for x in subdirs]
- paths = file_paths + dir_paths
- return paths
+ return file_paths + dir_paths
+
+ def get_descendants_ids(self):
+ desc = []
+ for child in self.children.all():
+ desc.append(child.id)
+ desc.extend(child.get_descendants_ids())
+ return desc
@property
def logical_path(self):
- """
- Gets logical path of the folder in the tree structure.
- Used to generate breadcrumbs
- """
folder_path = []
try:
if self.parent:
@@ -479,22 +573,58 @@ def pretty_logical_path(self):
def quoted_logical_path(self):
return quote(self.pretty_logical_path)
+ # Upstream permission methods
+ def has_edit_permission(self, request):
+ return request.user.has_perm("filer.change_folder") and self.has_generic_permission(request, 'edit')
+
+ def has_read_permission(self, request):
+ return self.has_generic_permission(request, 'read')
+
+ def has_add_children_permission(self, request):
+ return request.user.has_perm("filer.change_folder") and self.has_generic_permission(request, 'add_children')
+
+ def has_generic_permission(self, request, permission_type):
+ user = request.user
+ if not user.is_authenticated:
+ return False
+ elif user.is_superuser:
+ return True
+ elif user == self.owner:
+ return True
+ else:
+ if not hasattr(self, "permission_cache") or\
+ permission_type not in self.permission_cache or \
+ request.user.pk != self.permission_cache['user'].pk:
+ if not hasattr(self, "permission_cache") or request.user.pk != self.permission_cache['user'].pk:
+ self.permission_cache = {
+ 'user': request.user,
+ }
+ func = getattr(FolderPermission.objects,
+ "get_%s_id_list" % permission_type)
+ permission = func(user)
+ if permission == "All":
+ self.permission_cache[permission_type] = True
+ self.permission_cache['read'] = True
+ self.permission_cache['edit'] = True
+ self.permission_cache['add_children'] = True
+ else:
+ self.permission_cache[permission_type] = self.id in permission
+ return self.permission_cache[permission_type]
+
+ def get_admin_change_url(self):
+ return reverse('admin:filer_folder_change', args=(self.id,))
+
def get_admin_url_path(self):
return reverse('admin:filer_folder_change', args=(self.id,))
def get_admin_directory_listing_url_path(self):
return reverse('admin:filer-directory_listing', args=(self.id,))
- def __str__(self):
- try:
- name = self.pretty_logical_path
- except:
- name = self.name
- return name
-
- @property
- def actual_name(self):
- return self.name
+ def get_admin_delete_url(self):
+ return reverse(
+ f'admin:{self._meta.app_label}_{self._meta.model_name}_delete',
+ args=(self.pk,)
+ )
def contains_folder(self, folder_name):
try:
@@ -503,12 +633,17 @@ def contains_folder(self, folder_name):
except Folder.DoesNotExist:
return False
+ @property
+ def actual_name(self):
+ return self.name
+
@property
def get_folder_type_display(self):
if self.shared.exists():
return 'Shared by site'
return Folder.FOLDER_TYPES[self.folder_type]
+ # PBS-specific: site/core permission methods
def is_core(self):
return self.folder_type == Folder.CORE_FOLDER
@@ -524,9 +659,6 @@ def is_restricted_for_user(self, user):
not can_restrict_on_site(user, self.site)))
def can_change_restricted(self, user):
- """
- Checks if restriction operation is available for this folder.
- """
perm = 'filer.can_restrict_operations'
if (not (user.has_perm(perm, self) or user.has_perm(perm)) or
not can_restrict_on_site(user, self.site)):
@@ -534,7 +666,6 @@ def can_change_restricted(self, user):
if not self.parent:
return True
if self.parent.restricted == self.restricted == True:
- # only parent can be set to True
return False
if self.parent.restricted == self.restricted == False:
return True
@@ -545,33 +676,25 @@ def can_change_restricted(self, user):
return True
def has_add_permission(self, user):
- # nobody can add subfolders in core folders
if (self.is_readonly_for_user(user) or
self.is_restricted_for_user(user)):
return False
- # only site admins can add subfolders in site folders with no site
if not self.site and has_admin_role(user):
return True
- # regular users need to have permissions to add folders and
- # need to have a role over the site owner of the folder
if not self.site or not has_role_on_site(user, self.site):
return False
perm = 'filer.add_folder'
return user.has_perm(perm, self.site) or user.has_perm(perm)
def has_change_permission(self, user):
- # nobody can change core folder
if (self.is_readonly_for_user(user) or
self.is_restricted_for_user(user)):
return False
- # only admins can change site folders with no site owner
if not self.site and has_admin_role(user):
return True
-
if not self.site:
return False
if not self.parent:
- # only site admins can change root site folders
return has_admin_role_on_site(user, self.site)
perm = 'filer.change_folder'
return ((user.has_perm(perm, self.site) or user.has_perm(perm)) and
@@ -581,29 +704,16 @@ def has_delete_permission(self, user):
if (self.is_readonly_for_user(user) or
self.is_restricted_for_user(user)):
return False
-
- # only super users can delete site folders with no site owner
if not self.site and user.is_superuser:
return True
-
if not self.site:
return False
if not self.parent:
- # only site admins can delete root site folders
return has_admin_role_on_site(user, self.site)
perm = 'filer.delete_folder'
return ((user.has_perm(perm, self.site) or user.has_perm(perm)) and
has_role_on_site(user, self.site))
- class Meta:
- ordering = ('name',)
- permissions = (("can_use_directory_listing",
- "Can use directory listing"),
- ("can_restrict_operations",
- "Can restrict files or folders"),)
- app_label = 'filer'
- verbose_name = _("Folder")
- verbose_name_plural = _("Folders")
# MPTT registration
try:
@@ -626,3 +736,150 @@ def update_shared_sites_for_descendants(instance, **kwargs):
descendants = instance.get_descendants()
for desc_folder in descendants:
desc_folder.shared.set(sites)
+
+
+# Upstream: FolderPermission model
+class FolderPermission(models.Model):
+ ALL = 0
+ THIS = 1
+ CHILDREN = 2
+
+ ALLOW = 1
+ DENY = 0
+
+ TYPES = [
+ (ALL, _("all items")),
+ (THIS, _("this item only")),
+ (CHILDREN, _("this item and all children")),
+ ]
+
+ PERMISIONS = [
+ (None, _("inherit")),
+ (ALLOW, _("allow")),
+ (DENY, _("deny")),
+ ]
+
+ folder = models.ForeignKey(
+ Folder,
+ verbose_name=("folder"),
+ null=True,
+ blank=True,
+ on_delete=models.CASCADE,
+ )
+
+ type = models.SmallIntegerField(
+ _("type"),
+ choices=TYPES,
+ default=ALL,
+ )
+
+ user = models.ForeignKey(
+ getattr(settings, 'AUTH_USER_MODEL', 'auth.User'),
+ related_name="filer_folder_permissions",
+ on_delete=models.SET_NULL,
+ verbose_name=_("user"),
+ blank=True,
+ null=True,
+ )
+
+ group = models.ForeignKey(
+ auth_models.Group,
+ related_name="filer_folder_permissions",
+ verbose_name=_("group"),
+ blank=True,
+ null=True,
+ on_delete=models.CASCADE,
+ )
+
+ everybody = models.BooleanField(
+ _("everybody"),
+ default=False,
+ )
+
+ can_read = models.SmallIntegerField(
+ _("can read"),
+ choices=PERMISIONS,
+ blank=True,
+ null=True,
+ default=None,
+ )
+
+ can_edit = models.SmallIntegerField(
+ _("can edit"),
+ choices=PERMISIONS,
+ blank=True,
+ null=True,
+ default=None,
+ )
+
+ can_add_children = models.SmallIntegerField(
+ _("can add children"),
+ choices=PERMISIONS,
+ blank=True,
+ null=True,
+ default=None,
+ )
+
+ class Meta:
+ verbose_name = _('folder permission')
+ verbose_name_plural = _('folder permissions')
+ app_label = 'filer'
+
+ objects = FolderPermissionManager()
+
+ def __str__(self):
+ return self.pretty_logical_path
+
+ def __repr__(self):
+ return f'<{self.__class__.__name__}(pk={self.pk}): folder="{self.pretty_logical_path}">'
+
+ def clean(self):
+ if self.type == self.ALL and self.folder:
+ raise ValidationError(_('Folder cannot be selected with type "all items".'))
+ if self.type != self.ALL and not self.folder:
+ raise ValidationError(_('Folder has to be selected when type is not "all items".'))
+ if self.everybody and (self.user or self.group):
+ raise ValidationError(_('User or group cannot be selected together with "everybody".'))
+ if not self.user and not self.group and not self.everybody:
+ raise ValidationError(_('At least one of user, group, or "everybody" has to be selected.'))
+
+ @cached_property
+ def pretty_logical_path(self):
+ if self.folder:
+ return self.folder.pretty_logical_path
+ return gettext("All Folders")
+
+ pretty_logical_path.short_description = _("Logical Path")
+
+ @cached_property
+ def who(self):
+ parts = []
+ if self.user:
+ parts.append(_("User: {user}").format(user=self.user))
+ if self.group:
+ parts.append(_("Group: {group}").format(group=self.group))
+ if self.everybody:
+ parts.append(_("Everybody"))
+ if parts:
+ return format_html_join("; ", '{}', ((p,) for p in parts))
+ return '–'
+
+ who.short_description = _("Who")
+
+ @cached_property
+ def what(self):
+ mapping = {
+ 'can_edit': _("Edit"),
+ 'can_read': _("Read"),
+ 'can_add_children': _("Add children"),
+ }
+ perms = []
+ for key, text in mapping.items():
+ perm = getattr(self, key)
+ if perm == self.ALLOW:
+ perms.append(text)
+ elif perm == self.DENY:
+ perms.append('\u0336'.join(text) + '\u0336')
+ return format_html_join(", ", '{}', ((p,) for p in perms))
+
+ what.short_description = _("What")
diff --git a/filer/models/imagemodels.py b/filer/models/imagemodels.py
index 825b7f2ad..00d0ef270 100644
--- a/filer/models/imagemodels.py
+++ b/filer/models/imagemodels.py
@@ -1,207 +1,66 @@
-#-*- coding: utf-8 -*-
import logging
-
-try:
- from PIL import Image as PILImage
-except ImportError:
- try:
- import Image as PILImage
- except ImportError:
- raise ImportError("The Python Imaging Library was not found.")
from datetime import datetime
+
+from django.conf import settings
from django.db import models
+from django.utils.timezone import get_current_timezone, make_aware, now
from django.utils.translation import gettext_lazy as _
-from django.utils import timezone
-from django.conf import settings
-from django.core.exceptions import ValidationError
-from filer import settings as filer_settings
-from filer.models.filemodels import File
-from filer.utils.pil_exif import get_exif_for_file
-import os
-
-logger = logging.getLogger("filer")
-
-class Image(File):
- SIDEBAR_IMAGE_WIDTH = 210
- DEFAULT_THUMBNAILS = {
- 'admin_clipboard_icon': {'size': (32, 32), 'crop': True,
- 'upscale': True},
- 'admin_sidebar_preview': {'size': (SIDEBAR_IMAGE_WIDTH, 10000)},
- 'admin_directory_listing_icon': {'size': (48, 48),
- 'crop': True, 'upscale': True},
- 'admin_tiny_icon': {'size': (32, 32), 'crop': True, 'upscale': True},
- }
- file_type = 'Image'
- _icon = "image"
- _filename_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.ico', '.svg', '.webp']
+from .abstract import BaseImage
- _height = models.IntegerField(null=True, blank=True)
- _width = models.IntegerField(null=True, blank=True)
- date_taken = models.DateTimeField(_('date taken'), null=True, blank=True,
- editable=False)
-
- default_alt_text = models.TextField(
- _('default alt text'), blank=True, null=True,
- help_text=_('Describes the essence of the image for users who have '
- 'images turned off in their browser, or are visually '
- 'impaired and using a screen reader; and it is used to '
- 'identify images to search engines.'))
- default_caption = models.TextField(
- _('default caption'), blank=True, null=True,
- help_text=_('Caption text is displayed directly below an image '
- 'plugin to add context; there is no character limit;'
- 'for images fewer than 200 pixels '
- 'wide, the caption text is only displayed on hover.'))
- default_credit = models.CharField(
- _('default credit text'), max_length=255, blank=True, null=True,
- help_text=_('Credit text gives credit to the owner or licensor of '
- 'an image; it is displayed below the image plugin, or '
- 'below the caption text on an image plugin, if that '
- 'option is selected; it is displayed along the bottom '
- 'of an image in the photo gallery plugin; there is a '
- '30-character limit, including spaces.'))
-
- author = models.CharField(_('author'), max_length=255, null=True, blank=True)
-
- must_always_publish_author_credit = models.BooleanField(_('must always publish author credit'), default=False)
- must_always_publish_copyright = models.BooleanField(_('must always publish copyright'), default=False)
-
- subject_location = models.CharField(_('subject location'), max_length=64, null=True, blank=True,
- default=None)
-
- @classmethod
- def matches_file_type(cls, iname, ifile, request):
- # This was originally in admin/clipboardadmin.py it was inside of a try
- # except, I have moved it here outside of a try except because I can't
- # figure out just what kind of exception this could generate... all it was
- # doing for me was obscuring errors...
- # --Dave Butler
- iext = os.path.splitext(iname)[1].lower()
- return iext in Image._filename_extensions
+logger = logging.getLogger("filer")
- def clean(self):
- if self.default_credit:
- self.default_credit = self.default_credit.strip()
- if self.default_alt_text:
- self.default_alt_text = self.default_alt_text.strip()
- if self.default_caption:
- self.default_caption = self.default_caption.strip()
- if int(len(self.default_credit or '')) > 30:
- raise ValidationError(
- "Ensure default credit text has at most 30 characters ("
- "%s characters found)." % len(self.default_credit))
- super(Image, self).clean()
+# This is the standard Image model which can be swapped for a custom model using FILER_IMAGE_MODEL setting
+class Image(BaseImage):
+ date_taken = models.DateTimeField(
+ _("date taken"),
+ null=True,
+ blank=True,
+ editable=False,
+ )
+
+ author = models.CharField(
+ _("author"),
+ max_length=255,
+ null=True,
+ blank=True,
+ )
+
+ must_always_publish_author_credit = models.BooleanField(
+ _("must always publish author credit"),
+ default=False,
+ )
+
+ must_always_publish_copyright = models.BooleanField(
+ _('must always publish copyright'),
+ default=False,
+ )
+
+ class Meta(BaseImage.Meta):
+ swappable = 'FILER_IMAGE_MODEL'
+ default_manager_name = 'objects'
def save(self, *args, **kwargs):
- self.full_clean()
if self.date_taken is None:
try:
exif_date = self.exif.get('DateTimeOriginal', None)
if exif_date is not None:
- d, t = str.split(exif_date.values)
+ d, t = exif_date.split(" ")
year, month, day = d.split(':')
hour, minute, second = t.split(':')
if getattr(settings, "USE_TZ", False):
- tz = timezone.get_current_timezone()
- self.date_taken = timezone.make_aware(datetime(
+ tz = get_current_timezone()
+ self.date_taken = make_aware(datetime(
int(year), int(month), int(day),
int(hour), int(minute), int(second)), tz)
else:
self.date_taken = datetime(
int(year), int(month), int(day),
int(hour), int(minute), int(second))
- except:
+ except Exception:
pass
if self.date_taken is None:
- self.date_taken = timezone.now()
- self.has_all_mandatory_data = self._check_validity()
- try:
- # do this more efficient somehow?
- self.file.seek(0)
- self._width, self._height = PILImage.open(self.file).size
- except Exception:
- # probably the image is missing. nevermind.
- pass
- super(Image, self).save(*args, **kwargs)
-
- def _check_validity(self):
- if not self.name:
- return False
- return True
-
- def sidebar_image_ratio(self):
- if self.width:
- return float(self.width) / float(self.SIDEBAR_IMAGE_WIDTH)
- else:
- return 1.0
-
- def _get_exif(self):
- if hasattr(self, '_exif_cache'):
- return self._exif_cache
- else:
- if self.file:
- self._exif_cache = get_exif_for_file(self.file.path)
- else:
- self._exif_cache = {}
- return self._exif_cache
- exif = property(_get_exif)
-
- @property
- def label(self):
- if self.name in ['', None]:
- return self.original_filename or 'unnamed file'
- else:
- return self.name
-
- @property
- def width(self):
- return self._width or 0
-
- @property
- def height(self):
- return self._height or 0
-
- def _generate_thumbnails(self, required_thumbnails):
- _thumbnails = {}
- if self.is_in_trash():
- return _thumbnails
- for name, opts in list(required_thumbnails.items()):
- try:
- opts.update({'subject_location': self.subject_location})
- thumb = self.file.get_thumbnail(opts)
- _thumbnails[name] = thumb.url
- except Exception as e:
- # catch exception and manage it. We can re-raise it for debugging
- # purposes and/or just logging it, provided user configured
- # proper logging configuration
- if filer_settings.FILER_ENABLE_LOGGING:
- logger.error('Error while generating thumbnail: %s',e)
- if filer_settings.FILER_DEBUG:
- raise e
- return _thumbnails
-
- @property
- def icons(self):
- required_thumbnails = dict(
- (size, {'size': (int(size), int(size)),
- 'crop': True,
- 'upscale': True,
- 'subject_location': self.subject_location})
- for size in filer_settings.FILER_ADMIN_ICON_SIZES)
- return self._generate_thumbnails(required_thumbnails)
-
- @property
- def thumbnails(self):
- return self._generate_thumbnails(Image.DEFAULT_THUMBNAILS)
-
- @property
- def easy_thumbnails_thumbnailer(self):
- return self.file
-
- class Meta:
- app_label = 'filer'
- verbose_name = _('image')
- verbose_name_plural = _('images')
+ self.date_taken = now()
+ super().save(*args, **kwargs)
diff --git a/filer/models/mixins.py b/filer/models/mixins.py
index 783d1123b..1d4cb2ce7 100644
--- a/filer/models/mixins.py
+++ b/filer/models/mixins.py
@@ -1,10 +1,13 @@
-#-*- coding: utf-8 -*-
-from filer.settings import FILER_ADMIN_ICON_SIZES, FILER_STATICMEDIA_PREFIX
+import warnings
+
from django.db import models
+from django.templatetags.static import static
from django.utils.translation import gettext_lazy as _
+from ..settings import FILER_ADMIN_ICON_SIZES
+
-class IconsMixin(object):
+class IconsMixin:
"""
Can be used on any model that has a _icon attribute. will return a dict
containing urls for icons of different sizes with that name.
@@ -14,11 +17,15 @@ def icons(self):
r = {}
if getattr(self, '_icon', False):
for size in FILER_ADMIN_ICON_SIZES:
- r[size] = "%sicons/%s_%sx%s.png" % (
- FILER_STATICMEDIA_PREFIX, self._icon, size, size)
+ try:
+ r[size] = static("filer/icons/{}_{}x{}.png".format(
+ self._icon, size, size))
+ except ValueError:
+ pass
return r
+# PBS-specific: trashable decorator
def trashable(cls):
deleted_at = models.DateTimeField(
diff --git a/filer/models/thumbnailoptionmodels.py b/filer/models/thumbnailoptionmodels.py
new file mode 100644
index 000000000..883df7989
--- /dev/null
+++ b/filer/models/thumbnailoptionmodels.py
@@ -0,0 +1,61 @@
+from django.db import models
+from django.utils.translation import gettext_lazy as _
+
+
+class ThumbnailOption(models.Model):
+ """
+ This class defines the option use to create the thumbnail.
+ """
+ name = models.CharField(
+ _("name"),
+ max_length=100,
+ )
+
+ width = models.IntegerField(
+ _("width"),
+ help_text=_("width in pixel."),
+ )
+
+ height = models.IntegerField(
+ _("height"),
+ help_text=_("height in pixel."),
+ )
+
+ crop = models.BooleanField(
+ _("crop"),
+ default=True,
+ )
+
+ upscale = models.BooleanField(
+ _("upscale"),
+ default=True,
+ )
+
+ class Meta:
+ app_label = 'filer'
+ ordering = ('width', 'height')
+ verbose_name = _("thumbnail option")
+ verbose_name_plural = _("thumbnail options")
+
+ def __str__(self):
+ return f'{self.name} -- {self.width} x {self.height}'
+
+ @property
+ def as_dict(self):
+ """
+ This property returns a dictionary suitable for Thumbnailer.get_thumbnail()
+
+ Sample code:
+ # thumboption_obj is a ThumbnailOption instance
+ # filerimage is a Image instance
+ option_dict = thumboption_obj.as_dict
+ thumbnailer = filerimage.easy_thumbnails_thumbnailer
+ thumb_image = thumbnailer.get_thumbnail(option_dict)
+ """
+ return {
+ 'size': (self.width, self.height),
+ 'width': self.width,
+ 'height': self.height,
+ 'crop': self.crop,
+ 'upscale': self.upscale,
+ }
diff --git a/filer/models/virtualitems.py b/filer/models/virtualitems.py
index 89c9cae51..e65b39fd6 100644
--- a/filer/models/virtualitems.py
+++ b/filer/models/virtualitems.py
@@ -1,10 +1,11 @@
-#-*- coding: utf-8 -*-
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
-from filer.models import mixins
-from filer.models.filemodels import File
-from filer.models.foldermodels import Folder
-from filer.utils.cms_roles import *
+
+from .. import settings as filer_settings
+from ..utils.cms_roles import has_admin_role
+from . import mixins
+from .filemodels import File
+from .foldermodels import Folder
class DummyFolder(mixins.IconsMixin):
@@ -43,10 +44,16 @@ def logical_path(self):
class UnfiledImages(DummyFolder):
+ """PBS name for unsorted/unfiled images."""
name = _("unfiled files")
is_root = True
+ is_unsorted_uploads = True
_icon = "unfiled_folder"
+ def __init__(self, user=None):
+ super().__init__()
+ self.user = user
+
def _files(self):
return File.objects.filter(
folder__isnull=True, clipboarditem__isnull=True)
@@ -56,6 +63,10 @@ def get_admin_directory_listing_url_path(self):
return reverse('admin:filer-directory_listing-unfiled_images')
+# Upstream compat alias
+UnsortedImages = UnfiledImages
+
+
class ImagesWithMissingData(DummyFolder):
name = _("files with missing metadata")
is_root = True
@@ -93,12 +104,12 @@ def contains_folder(self, folder_name):
return False
def entries_with_names(self, names):
- # children of te root folder can only be folders, so we don't have to look for files
return self.children.filter(name__in=names)
def get_admin_directory_listing_url_path(self):
return reverse('admin:filer-directory_listing-root')
+ # PBS-specific permission methods
def is_restricted_for_user(self, user):
return not has_admin_role(user)
diff --git a/filer/server/backends/base.py b/filer/server/backends/base.py
index 6a843ea0e..5e811ee4e 100644
--- a/filer/server/backends/base.py
+++ b/filer/server/backends/base.py
@@ -1,18 +1,14 @@
-#-*- coding: utf-8 -*-
-from django.utils.encoding import smart_str
-import mimetypes
import os
+from django.utils.encoding import smart_str
+
-class ServerBase(object):
+class ServerBase:
"""
Server classes define a way to serve a Django File object.
Warning: this API is EXPERIMENTAL and may change at any time.
"""
- def get_mimetype(self, path):
- return mimetypes.guess_type(path)[0] or 'application/octet-stream'
-
def default_headers(self, **kwargs):
self.save_as_header(**kwargs)
self.size_header(**kwargs)
@@ -21,24 +17,29 @@ def save_as_header(self, response, **kwargs):
"""
* if save_as is False the header will not be added
* if save_as is a filename, it will be used in the header
- * if save_as is None the filename will be determined from the file path
+ * if save_as is True or None the filename will be determined from the
+ file path
"""
save_as = kwargs.get('save_as', None)
- if save_as == False:
+ if save_as is False:
return
file_obj = kwargs.get('file_obj', None)
- filename = None
- if save_as:
- filename = save_as
- else:
+ if save_as is True or save_as is None:
filename = os.path.basename(file_obj.path)
- response['Content-Disposition'] = smart_str('attachment; filename=%s' % filename)
+ else:
+ filename = save_as
+ response['Content-Disposition'] = smart_str(
+ 'attachment; filename=%s' % filename)
def size_header(self, response, **kwargs):
size = kwargs.get('size', None)
- #file = kwargs.get('file', None)
+ # file = kwargs.get('file', None)
if size:
response['Content-Length'] = size
- # we should not do this, because it accesses the file. and that might be an expensive operation.
+ # we should not do this, because it accesses the file. and that might
+ # be an expensive operation.
# elif file and file.size is not None:
# response['Content-Length'] = file.size
+
+ def serve(self, request, filer_file, **kwargs):
+ raise NotImplementedError(".serve() must be overridden")
diff --git a/filer/server/backends/default.py b/filer/server/backends/default.py
index 172ac1871..2aed251d4 100644
--- a/filer/server/backends/default.py
+++ b/filer/server/backends/default.py
@@ -1,10 +1,11 @@
-#-*- coding: utf-8 -*-
import os
import stat
+
from django.http import Http404, HttpResponse, HttpResponseNotModified
from django.utils.http import http_date
from django.views.static import was_modified_since
-from filer.server.backends.base import ServerBase
+
+from .base import ServerBase
class DefaultServer(ServerBase):
@@ -14,19 +15,19 @@ class DefaultServer(ServerBase):
This will only work for files that can be accessed in the local filesystem.
"""
- def serve(self, request, file_obj, **kwargs):
- fullpath = file_obj.path
+ def serve(self, request, filer_file, **kwargs):
+ fullpath = filer_file.path
# the following code is largely borrowed from `django.views.static.serve`
# and django-filetransfers: filetransfers.backends.default
if not os.path.exists(fullpath):
raise Http404('"%s" does not exist' % fullpath)
# Respect the If-Modified-Since header.
statobj = os.stat(fullpath)
- mimetype = self.get_mimetype(fullpath)
+ response_params = {'content_type': filer_file.mime_type}
if not was_modified_since(request.META.get('HTTP_IF_MODIFIED_SINCE'),
statobj[stat.ST_MTIME]):
- return HttpResponseNotModified(content_type=mimetype)
- response = HttpResponse(open(fullpath, 'rb').read(), content_type=mimetype)
+ return HttpResponseNotModified(**response_params)
+ response = HttpResponse(open(fullpath, 'rb').read(), **response_params)
response["Last-Modified"] = http_date(statobj[stat.ST_MTIME])
- self.default_headers(request=request, response=response, file_obj=file_obj, **kwargs)
+ self.default_headers(request=request, response=response, file_obj=filer_file.file, **kwargs)
return response
diff --git a/filer/server/backends/nginx.py b/filer/server/backends/nginx.py
index d0b6e9adf..03a7ff17f 100644
--- a/filer/server/backends/nginx.py
+++ b/filer/server/backends/nginx.py
@@ -1,6 +1,6 @@
-#-*- coding: utf-8 -*-
from django.http import HttpResponse
-from filer.server.backends.base import ServerBase
+
+from .base import ServerBase
class NginxXAccelRedirectServer(ServerBase):
@@ -18,11 +18,10 @@ def __init__(self, location, nginx_location):
def get_nginx_location(self, path):
return path.replace(self.location, self.nginx_location)
- def serve(self, request, file_obj, **kwargs):
- # we should not use get_mimetype() here, because it tries to access the file in the filesystem.
- #response = HttpResponse(content_type=self.get_mimetype(file.path))
+ def serve(self, request, filer_file, **kwargs):
response = HttpResponse()
- nginx_path = self.get_nginx_location(file_obj.path)
+ response['Content-Type'] = filer_file.mime_type
+ nginx_path = self.get_nginx_location(filer_file.path)
response['X-Accel-Redirect'] = nginx_path
- self.default_headers(request=request, response=response, file_obj=file_obj, **kwargs)
+ self.default_headers(request=request, response=response, file_obj=filer_file.file, **kwargs)
return response
diff --git a/filer/server/backends/xsendfile.py b/filer/server/backends/xsendfile.py
index cd3316f64..476a87f7b 100644
--- a/filer/server/backends/xsendfile.py
+++ b/filer/server/backends/xsendfile.py
@@ -1,17 +1,17 @@
-#-*- coding: utf-8 -*-
from django.http import HttpResponse
-from filer.server.backends.base import ServerBase
+
+from .base import ServerBase
class ApacheXSendfileServer(ServerBase):
- def serve(self, request, file_obj, **kwargs):
+ def serve(self, request, filer_file, **kwargs):
response = HttpResponse()
- response['X-Sendfile'] = file_obj.path
+ response['X-Sendfile'] = filer_file.path
# This is needed for lighttpd, hopefully this will
# not be needed after this is fixed:
# http://redmine.lighttpd.net/issues/2076
- response['Content-Type'] = self.get_mimetype(file_obj.path)
+ response['Content-Type'] = filer_file.mime_type
- self.default_headers(request=request, response=response, file_obj=file_obj, **kwargs)
+ self.default_headers(request=request, response=response, file_obj=filer_file.file, **kwargs)
return response
diff --git a/filer/server/main_server_urls.py b/filer/server/main_server_urls.py
index bb555c1a3..232c1fe2a 100644
--- a/filer/server/main_server_urls.py
+++ b/filer/server/main_server_urls.py
@@ -1,8 +1,8 @@
-#-*- coding: utf-8 -*-
from django.urls import re_path
from . import views
+
urlpatterns = [
- re_path(r'^(?P.*)$', views.serve_protected_file)
+ re_path(r'^(?P.*)$', views.serve_protected_file),
]
diff --git a/filer/server/thumbnails_server_urls.py b/filer/server/thumbnails_server_urls.py
index 072f51cac..7d2cb0395 100644
--- a/filer/server/thumbnails_server_urls.py
+++ b/filer/server/thumbnails_server_urls.py
@@ -1,8 +1,8 @@
-#-*- coding: utf-8 -*-
from django.urls import re_path
from . import views
+
urlpatterns = [
- re_path(r'^(?P.*)$', views.serve_protected_thumbnail)
+ re_path(r'^(?P.*)$', views.serve_protected_thumbnail),
]
diff --git a/filer/server/urls.py b/filer/server/urls.py
index 14a1a0f4d..8f758dcc9 100644
--- a/filer/server/urls.py
+++ b/filer/server/urls.py
@@ -1,8 +1,12 @@
-#-*- coding: utf-8 -*-
-from django.urls import re_path, include
-from filer import settings as filer_settings
+from django.urls import include, re_path
-urlpatterns = [
- re_path(r'^' + filer_settings.FILER_PRIVATEMEDIA_STORAGE.base_url.lstrip('/'), include('filer.server.main_server_urls')),
- re_path(r'^' + filer_settings.FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE.base_url.lstrip('/'), include('filer.server.thumbnails_server_urls'))
-]
+from .. import settings as filer_settings
+
+
+if not filer_settings.FILER_0_8_COMPATIBILITY_MODE:
+ urlpatterns = [
+ re_path(r'^' + filer_settings.FILER_PRIVATEMEDIA_STORAGE.base_url.lstrip('/'), include('filer.server.main_server_urls')),
+ re_path(r'^' + filer_settings.FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE.base_url.lstrip('/'), include('filer.server.thumbnails_server_urls')),
+ ]
+else:
+ urlpatterns = []
diff --git a/filer/server/views.py b/filer/server/views.py
index ea26c9def..90b394abb 100644
--- a/filer/server/views.py
+++ b/filer/server/views.py
@@ -1,14 +1,20 @@
-#-*- coding: utf-8 -*-
+from django.conf import settings
+from django.core.exceptions import PermissionDenied
from django.http import Http404
+from django.views.decorators.cache import never_cache
+
from easy_thumbnails.files import ThumbnailFile
-from filer import settings as filer_settings
-from filer.models import File
-from filer.utils.filer_easy_thumbnails import thumbnail_to_original_filename
+
+from .. import settings as filer_settings
+from ..models import File
+from ..utils.filer_easy_thumbnails import thumbnail_to_original_filename
+
server = filer_settings.FILER_PRIVATEMEDIA_SERVER
thumbnail_server = filer_settings.FILER_PRIVATEMEDIA_THUMBNAIL_SERVER
+@never_cache
def serve_protected_file(request, path):
"""
Serve protected files to authenticated users with read permissions.
@@ -17,9 +23,15 @@ def serve_protected_file(request, path):
file_obj = File.objects.get(file=path, is_public=False)
except File.DoesNotExist:
raise Http404('File not found')
- return server.serve(request, file_obj=file_obj.file, save_as=False)
+ if not file_obj.has_read_permission(request):
+ if settings.DEBUG:
+ raise PermissionDenied
+ else:
+ raise Http404('File not found')
+ return server.serve(request, file_obj, save_as=False)
+@never_cache
def serve_protected_thumbnail(request, path):
"""
Serve protected thumbnails to authenticated users.
@@ -32,8 +44,14 @@ def serve_protected_thumbnail(request, path):
file_obj = File.objects.get(file=source_path, is_public=False)
except File.DoesNotExist:
raise Http404('File not found')
+ if not file_obj.has_read_permission(request):
+ if settings.DEBUG:
+ raise PermissionDenied
+ else:
+ raise Http404('File not found')
try:
thumbnail = ThumbnailFile(name=path, storage=file_obj.file.thumbnail_storage)
+ thumbnail.mime_type = file_obj.mime_type
return thumbnail_server.serve(request, thumbnail, save_as=False)
except Exception:
raise Http404('File not found')
diff --git a/filer/settings.py b/filer/settings.py
index 689ff2b60..5ac715abf 100644
--- a/filer/settings.py
+++ b/filer/settings.py
@@ -1,44 +1,73 @@
-#-*- coding: utf-8 -*-
+import logging
import os
from django.conf import settings
-from django.utils.module_loading import import_string
+from django.utils.module_loading import import_string as get_storage_class
+from django.utils.translation import gettext_lazy as _
-from filer.utils.loader import load_object
-from filer.utils.recursive_dictionary import RecursiveDictionaryWithExcludes
+from .utils.loader import load_object
+from .utils.recursive_dictionary import RecursiveDictionaryWithExcludes
-FILER_DEBUG = getattr(settings, 'FILER_DEBUG', False) # When True makes
+logger = logging.getLogger(__name__)
+
+# FILER_IMAGE_MODEL setting is used to swap Image model.
+# If such global setting does not exist, it will be created at this point (with default model name).
+# This is needed especially when using this setting in migrations.
+if not hasattr(settings, 'FILER_IMAGE_MODEL'):
+ setattr(settings, 'FILER_IMAGE_MODEL', 'filer.Image')
+FILER_IMAGE_MODEL = settings.FILER_IMAGE_MODEL
+
+FILER_DEBUG = getattr(settings, 'FILER_DEBUG', False) # When True makes
FILER_SUBJECT_LOCATION_IMAGE_DEBUG = getattr(settings, 'FILER_SUBJECT_LOCATION_IMAGE_DEBUG', False)
+FILER_WHITESPACE_COLOR = getattr(settings, 'FILER_WHITESPACE_COLOR', '#FFFFFF')
FILER_0_8_COMPATIBILITY_MODE = getattr(settings, 'FILER_0_8_COMPATIBILITY_MODE', False)
FILER_ENABLE_LOGGING = getattr(settings, 'FILER_ENABLE_LOGGING', False)
if FILER_ENABLE_LOGGING:
- FILER_ENABLE_LOGGING = (FILER_ENABLE_LOGGING and (getattr(settings, 'LOGGING') and
- ('' in settings.LOGGING['loggers'] or
- 'filer' in settings.LOGGING['loggers'])))
+ FILER_ENABLE_LOGGING = (
+ FILER_ENABLE_LOGGING and (getattr(settings, 'LOGGING')
+ and ('' in settings.LOGGING['loggers']
+ or 'filer' in settings.LOGGING['loggers'])))
+# PBS-specific: nohash rootfolders
FILER_NOHASH_ROOTFOLDERS = getattr(settings, 'FILER_NOHASH_ROOTFOLDERS', [])
+
FILER_ENABLE_PERMISSIONS = getattr(settings, 'FILER_ENABLE_PERMISSIONS', False)
+FILER_ALLOW_REGULAR_USERS_TO_ADD_ROOT_FOLDERS = getattr(settings, 'FILER_ALLOW_REGULAR_USERS_TO_ADD_ROOT_FOLDERS', False)
FILER_IS_PUBLIC_DEFAULT = getattr(settings, 'FILER_IS_PUBLIC_DEFAULT', True)
-FILER_PAGINATE_BY = getattr(settings, 'FILER_PAGINATE_BY', 20)
+FILER_PAGINATE_BY = getattr(settings, 'FILER_PAGINATE_BY', 100)
+
+if hasattr(settings, "FILER_ADMIN_ICON_SIZES"):
+ logger.warning("FILER_ADMIN_ICON_SIZES is deprecated and will be removed in the future.")
+
+_ICON_SIZES = getattr(settings, 'FILER_ADMIN_ICON_SIZES', ('16', '32', '48', '64'))
+# Reliably sort by integer value, but keep icon size as string.
+FILER_ADMIN_ICON_SIZES = [str(i) for i in sorted([int(s) for s in _ICON_SIZES])]
+
+# PBS legacy compat
FILER_STATICMEDIA_PREFIX = getattr(settings, 'FILER_STATICMEDIA_PREFIX', None)
if not FILER_STATICMEDIA_PREFIX:
FILER_STATICMEDIA_PREFIX = (getattr(settings, 'STATIC_URL', None) or settings.MEDIA_URL) + 'filer/'
-FILER_ADMIN_ICON_SIZES = getattr(settings, "FILER_ADMIN_ICON_SIZES", ('32',))
+# Currently, these two icon sizes are hard-coded into the admin and admin templates
+FILER_TABLE_ICON_SIZE = getattr(settings, "FILER_TABLE_ICON_SIZE", 40)
+FILER_THUMBNAIL_ICON_SIZE = getattr(settings, "FILER_THUMBNAIL_ICON_SIZE", 120)
+DEFERRED_THUMBNAIL_SIZES = (
+ FILER_TABLE_ICON_SIZE,
+ 2 * FILER_TABLE_ICON_SIZE,
+ FILER_THUMBNAIL_ICON_SIZE,
+ 2 * FILER_THUMBNAIL_ICON_SIZE,
+)
+
# This is an ordered iterable that describes a list of
# classes that I should check for when adding files
-FILER_FILE_MODELS = getattr(settings, 'FILER_FILE_MODELS',
- (
- 'filer.models.imagemodels.Image',
- 'filer.models.archivemodels.Archive',
- 'filer.models.filemodels.File',
- )
-)
+FILER_FILE_MODELS = getattr(
+ settings, 'FILER_FILE_MODELS',
+ (FILER_IMAGE_MODEL, 'filer.File'))
_FALLBACK_STORAGE_BACKEND = 'django.core.files.storage.FileSystemStorage'
@@ -46,7 +75,7 @@
DEFAULT_FILE_STORAGE = settings.STORAGES['default'].get('BACKEND', _FALLBACK_STORAGE_BACKEND)
else:
DEFAULT_FILE_STORAGE = getattr(settings, 'DEFAULT_FILE_STORAGE', _FALLBACK_STORAGE_BACKEND)
- # Django 5.1+ removed the legacy DEFAULT_FILE_STORAGE setting and relies
+ # PBS: Django 5.1+ removed the legacy DEFAULT_FILE_STORAGE setting and relies
# exclusively on STORAGES['default']. If the host project (e.g. bento)
# defines STORAGES without a 'default' key, Django's internal
# default_storage lookup will raise InvalidStorageError. Inject the
@@ -61,23 +90,23 @@
'main': {
'ENGINE': None,
'OPTIONS': {},
- },
+ },
'thumbnails': {
'ENGINE': None,
'OPTIONS': {},
- }
+ }
},
'private': {
'main': {
'ENGINE': None,
'OPTIONS': {},
- },
+ },
'thumbnails': {
'ENGINE': None,
'OPTIONS': {},
- },
},
- }
+ },
+}
DEFAULT_FILER_STORAGES = {
@@ -180,47 +209,47 @@
FILER_STORAGES.rec_update(user_filer_storages)
+
def update_storage_settings(user_settings, defaults, s, t):
if not user_settings[s][t]['ENGINE']:
user_settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE']
user_settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS']
if t == 'main':
- if not 'UPLOAD_TO' in user_settings[s][t]:
+ if 'UPLOAD_TO' not in user_settings[s][t]:
user_settings[s][t]['UPLOAD_TO'] = defaults[s][t]['UPLOAD_TO']
- if not 'UPLOAD_TO_PREFIX' in user_settings[s][t]:
+ if 'UPLOAD_TO_PREFIX' not in user_settings[s][t]:
user_settings[s][t]['UPLOAD_TO_PREFIX'] = defaults[s][t]['UPLOAD_TO_PREFIX']
if t == 'thumbnails':
- if not 'THUMBNAIL_OPTIONS' in user_settings[s][t]:
+ if 'THUMBNAIL_OPTIONS' not in user_settings[s][t]:
user_settings[s][t]['THUMBNAIL_OPTIONS'] = defaults[s][t]['THUMBNAIL_OPTIONS']
return user_settings
-for s in ['public', 'private']:
- for t in ['main', 'thumbnails']:
- update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, s, t)
+
+update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'public', 'main')
+update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'public', 'thumbnails')
+update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'private', 'main')
+update_storage_settings(FILER_STORAGES, DEFAULT_FILER_STORAGES, 'private', 'thumbnails')
FILER_SERVERS = RecursiveDictionaryWithExcludes(MINIMAL_FILER_SERVERS, rec_excluded_keys=('OPTIONS',))
FILER_SERVERS.rec_update(getattr(settings, 'FILER_SERVERS', {}))
+
def update_server_settings(settings, defaults, s, t):
if not settings[s][t]['ENGINE']:
settings[s][t]['ENGINE'] = defaults[s][t]['ENGINE']
settings[s][t]['OPTIONS'] = defaults[s][t]['OPTIONS']
return settings
-for t in ['main', 'thumbnails']:
- update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', t)
-# Storage class loader (Django 5.1+)
-def get_storage_class(path):
- return import_string(path)
+update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'main')
+update_server_settings(FILER_SERVERS, DEFAULT_FILER_SERVERS, 'private', 'thumbnails')
+
# Public media (media accessible without any permission checks)
FILER_PUBLICMEDIA_STORAGE = get_storage_class(FILER_STORAGES['public']['main']['ENGINE'])(**FILER_STORAGES['public']['main']['OPTIONS'])
FILER_PUBLICMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['public']['main']['UPLOAD_TO'])
if 'UPLOAD_TO_PREFIX' in FILER_STORAGES['public']['main']:
- FILER_PUBLICMEDIA_UPLOAD_TO = load_object('filer.utils.generate_filename.prefixed_factory')(
- FILER_PUBLICMEDIA_UPLOAD_TO, FILER_STORAGES['public']['main']['UPLOAD_TO_PREFIX']
- )
+ FILER_PUBLICMEDIA_UPLOAD_TO = load_object('filer.utils.generate_filename.prefixed_factory')(FILER_PUBLICMEDIA_UPLOAD_TO, FILER_STORAGES['public']['main']['UPLOAD_TO_PREFIX'])
FILER_PUBLICMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['public']['thumbnails']['ENGINE'])(**FILER_STORAGES['public']['thumbnails']['OPTIONS'])
FILER_PUBLICMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES['public']['thumbnails']['THUMBNAIL_OPTIONS']
@@ -229,55 +258,107 @@ def get_storage_class(path):
FILER_PRIVATEMEDIA_STORAGE = get_storage_class(FILER_STORAGES['private']['main']['ENGINE'])(**FILER_STORAGES['private']['main']['OPTIONS'])
FILER_PRIVATEMEDIA_UPLOAD_TO = load_object(FILER_STORAGES['private']['main']['UPLOAD_TO'])
if 'UPLOAD_TO_PREFIX' in FILER_STORAGES['private']['main']:
- FILER_PRIVATEMEDIA_UPLOAD_TO = load_object('filer.utils.generate_filename.prefixed_factory')(
- FILER_PRIVATEMEDIA_UPLOAD_TO, FILER_STORAGES['private']['main']['UPLOAD_TO_PREFIX']
- )
+ FILER_PRIVATEMEDIA_UPLOAD_TO = load_object('filer.utils.generate_filename.prefixed_factory')(FILER_PRIVATEMEDIA_UPLOAD_TO, FILER_STORAGES['private']['main']['UPLOAD_TO_PREFIX'])
FILER_PRIVATEMEDIA_THUMBNAIL_STORAGE = get_storage_class(FILER_STORAGES['private']['thumbnails']['ENGINE'])(**FILER_STORAGES['private']['thumbnails']['OPTIONS'])
FILER_PRIVATEMEDIA_THUMBNAIL_OPTIONS = FILER_STORAGES['private']['thumbnails']['THUMBNAIL_OPTIONS']
FILER_PRIVATEMEDIA_SERVER = load_object(FILER_SERVERS['private']['main']['ENGINE'])(**FILER_SERVERS['private']['main']['OPTIONS'])
FILER_PRIVATEMEDIA_THUMBNAIL_SERVER = load_object(FILER_SERVERS['private']['thumbnails']['ENGINE'])(**FILER_SERVERS['private']['thumbnails']['OPTIONS'])
+# By default limit number of simultaneous uploads if we are using SQLite
+if settings.DATABASES['default']['ENGINE'].endswith('sqlite3'):
+ _uploader_connections = 1
+else:
+ _uploader_connections = 3
+FILER_UPLOADER_CONNECTIONS = getattr(
+ settings, 'FILER_UPLOADER_CONNECTIONS', _uploader_connections)
+FILER_UPLOADER_MAX_FILES = getattr(
+ settings, 'FILER_UPLOADER_MAX_FILES', 100)
+FILER_UPLOADER_MAX_FILE_SIZE = getattr(
+ settings, 'FILER_UPLOADER_MAX_FILE_SIZE', None)
+
+
+FILER_DUMP_PAYLOAD = getattr(settings, 'FILER_DUMP_PAYLOAD', False)
+
+FILER_CANONICAL_URL = getattr(settings, 'FILER_CANONICAL_URL', 'canonical/')
+
+TABLE_LIST_TYPE = 'tb'
+THUMBNAIL_LIST_TYPE = 'th'
+FILER_FOLDER_ADMIN_LIST_TYPE_CHOICES = (
+ TABLE_LIST_TYPE,
+ THUMBNAIL_LIST_TYPE,
+)
+FILER_FOLDER_ADMIN_DEFAULT_LIST_TYPE = getattr(settings, 'FILER_FOLDER_ADMIN_DEFAULT_LIST_TYPE', TABLE_LIST_TYPE)
+if FILER_FOLDER_ADMIN_DEFAULT_LIST_TYPE not in FILER_FOLDER_ADMIN_LIST_TYPE_CHOICES:
+ FILER_FOLDER_ADMIN_DEFAULT_LIST_TYPE = TABLE_LIST_TYPE
+
+FILER_FOLDER_ADMIN_LIST_TYPE_SWITCHER_SETTINGS = {
+ TABLE_LIST_TYPE: {
+ 'icon': 'th-list',
+ 'tooltip_text': _('Show table view'),
+ 'template': 'admin/filer/folder/directory_table_list.html',
+ },
+ THUMBNAIL_LIST_TYPE: {
+ 'icon': 'th-large',
+ 'tooltip_text': _('Show thumbnail view'),
+ 'template': 'admin/filer/folder/directory_thumbnail_list.html',
+ },
+}
+
+IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.gif', '.webp']
+IMAGE_MIME_TYPES = ['gif', 'jpeg', 'png', 'x-png', 'svg+xml', 'webp']
+
+FILE_VALIDATORS = {
+ "text/html": ["filer.validation.deny_html"],
+ "image/svg+xml": ["filer.validation.validate_svg"],
+ "application/octet-stream": ["filer.validation.deny"],
+}
+
+remove_mime_types = getattr(settings, "FILER_REMOVE_FILE_VALIDATORS", [])
+for mime_type in remove_mime_types: # pragma: no cover
+ if mime_type in FILE_VALIDATORS:
+ del FILE_VALIDATORS[mime_type]
+
+for mime_type, validators in getattr(settings, "FILER_ADD_FILE_VALIDATORS", {}).items(): # pragma: no cover
+ if mime_type in FILE_VALIDATORS:
+ FILE_VALIDATORS[mime_type] += list(validators)
+ else:
+ FILE_VALIDATORS[mime_type] = list(validators)
+
+FILER_MIME_TYPE_WHITELIST = getattr(settings, "FILER_MIME_TYPE_WHITELIST", [])
+
+
+# Determine if django CMS is installed and if it comes with its own iconset
+ICON_CSS_LIB = ("filer/css/admin_filer.fa.icons.css",)
+if "cms" in settings.INSTALLED_APPS: # pragma: no cover
+ try:
+ from cms import __version__
+ from cms.utils.urlutils import static_with_version
+
+ if __version__ >= "4":
+ ICON_CSS_LIB = (
+ static_with_version("cms/css/cms.admin.css"),
+ "filer/css/admin_filer.cms.icons.css",
+ )
+ except (ModuleNotFoundError, ImportError):
+ pass
+
+# SVG are their own thumbnails if their size is below this limit
+FILER_MAX_SVG_THUMBNAIL_SIZE = getattr(settings, "FILER_MAX_SVG_THUMBNAIL_SIZE", 1024 * 1024) # 1MB default
+
+# --- PBS-specific settings ---
+
+# PBS: folder structure affects the URL of files on storage
FOLDER_AFFECTS_URL = getattr(settings, 'FILER_FOLDER_AFFECTS_URL', False)
+
+# PBS: CDN settings
CDN_DOMAIN = getattr(settings, 'FILER_CDN_DOMAIN', None)
CDN_INVALIDATION_TIME = getattr(settings, 'FILER_CDN_INVALIDATION_TIME', 0)
+
+# PBS: Trash settings
FILER_TRASH_PREFIX = getattr(settings, 'FILER_TRASH_PREFIX', '_trash')
-# defaults to one day
-FILER_TRASH_CLEAN_INTERVAL = getattr(settings, 'FILER_TRASH_CLEAN_INTERVAL', 60 * 60 * 24)
-
-
-# Roles Manager that controles how the filer checks permissions
-# Must be a callable or a the absolute path of the callable as a string.
-# Calling this manager should return an object that must define these functions:
-#
-# def is_site_admin(user):
-# """
-# :param user: django.contrib.auth.models.User to check permissions for
-# :return: True if the user is an admin on any site, False otherwise
-# """
-# pass
-
-# def has_perm_on_site(user, site_id, perm):
-# """
-# :param user: django.contrib.auth.models.User to check permissions for
-# :param site_id: id of django.contrib.sites.models.Site
-# on which the user must have the permission
-# :param perm: full name (.) of the permission, ex: filer.add_file
-# :return: True if the user has the permission on that site, False otherwise
-# """
-# pass
-
-# def get_accessible_sites(user):
-# """
-# :return: list of django.contrib.sites.models.Site IDs on which the user has access.
-# """
-# pass
-
-# def get_administered_sites(user):
-# """
-# :return: list of django.contrib.sites.models.Site objects on which the user has admin access.
-# """
-# pass
+FILER_TRASH_CLEAN_INTERVAL = getattr(settings, 'FILER_TRASH_CLEAN_INTERVAL', 60 * 60 * 24) # defaults to one day
+# PBS: Roles Manager that controls how the filer checks permissions
_default_roles_manager = 'cmsroles.siteadmin.FilerRolesManager'
try:
import cmsroles # noqa: F401
diff --git a/filer/static/filer/css/admin_filer.cms.icons.css b/filer/static/filer/css/admin_filer.cms.icons.css
new file mode 100644
index 000000000..836885eba
--- /dev/null
+++ b/filer/static/filer/css/admin_filer.cms.icons.css
@@ -0,0 +1 @@
+@font-face{font-family:"django-filer-iconfont";src:url("../fonts/django-filer-iconfont.eot?v=3.2.0");src:url("../fonts/django-filer-iconfont.eot?v=3.2.0#iefix") format("eot"),url("../fonts/django-filer-iconfont.woff2?v=3.2.0") format("woff2"),url("../fonts/django-filer-iconfont.woff?v=3.2.0") format("woff"),url("../fonts/django-filer-iconfont.ttf?v=3.2.0") format("truetype"),url("../fonts/django-filer-iconfont.svg?v=3.2.0#django-filer-iconfont") format("svg");font-weight:normal;font-style:normal}.filer-icon{display:inline-block;font-family:django-filer-iconfont;font-size:inherit;text-rendering:auto;line-height:1;transform:translate(0, 0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.filer-icon-arrow-down:before{content:"\E001"}.filer-icon-caret-down:before{content:"\E002"}.filer-icon-chevron-right:before{content:"\E003"}.filer-icon-download:before{content:"\E004"}.filer-icon-expand:before{content:"\E005"}.filer-icon-link:before{content:"\E006"}.filer-icon-move-to-folder:before{content:"\E007"}.filer-icon-picture:before{content:"\E008"}.filer-icon-remove-selection:before{content:"\E009"}.filer-icon-select:before{content:"\E00A"}.filer-icon-th-large:before{content:"\E00B"}.filer-icon-th-list:before{content:"\E00C"}.filer-icon-upload:before{content:"\E00D"}
\ No newline at end of file
diff --git a/filer/static/filer/css/admin_filer.css b/filer/static/filer/css/admin_filer.css
new file mode 100644
index 000000000..a149b7ae1
--- /dev/null
+++ b/filer/static/filer/css/admin_filer.css
@@ -0,0 +1,3 @@
+/*!
+ * @copyright: https://github.com/divio/django-filer
+ */html,body{min-width:320px;height:100% !important}.text-left{text-align:left}.text-right{text-align:right}.clearfix:after{content:"";display:table;clear:both}.related-widget-wrapper{float:none !important}.related-lookup.hidden{display:none !important}.tiny{font-size:12px !important;color:var(--dca-gray-light, var(--body-quiet-color, #999)) !important}.nav-pages{position:relative;font-size:12px;color:var(--dca-gray-light, var(--body-quiet-color, #999)) !important;padding-left:10px;padding-right:20px;padding-top:15px;padding-bottom:15px;box-sizing:border-box;background:var(--dca-white, var(--body-bg, #fff))}.nav-pages span{font-size:12px;color:var(--dca-gray-light, var(--body-quiet-color, #999)) !important}.nav-pages .actions{float:right}#id_upload_button:before{display:none}#content #content-main{margin-top:0}.filebrowser.cms-admin-sideframe #container .breadcrumbs+#content,.filebrowser.cms-admin-sideframe #container .breadcrumbs+.messagelist+#content{margin-left:0 !important;margin-right:0 !important}.filebrowser.cms-admin-sideframe #container .breadcrumbs{left:0 !important;padding-left:20px !important}.filebrowser #container{min-width:auto}.filebrowser #container #content{padding:0;box-shadow:0 0 5px 0 rgba(0,0,0,.2)}.filebrowser #container .breadcrumbs+#content,.filebrowser #container .breadcrumbs+.messagelist+#content{margin-left:3% !important}.filebrowser h1.folder_header{position:relative;top:6px}.filebrowser h2{display:none}.filebrowser #content-main{background-color:var(--dca-white, var(--body-bg, #fff))}.filer-widget{width:100%}.field-file,.field-sha1{word-wrap:break-word;word-break:break-all}.well.img-preview{display:none;margin-top:0}.img-wrapper{width:180px;height:180px}.file-duplicates{clear:both;padding:20px 0 0}form .cancel-link{height:auto !important;line-height:inherit !important;padding:10px 15px}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.hidden{display:none !important}.filer-info-bar{min-height:15px;margin:0 0 2px !important;padding:15px 20px;box-shadow:0 0 10px -2px rgba(0,0,0,.2);background-color:var(--dca-white, var(--body-bg, #fff))}.navigator .actions span.all,.navigator .actions span.clear,.navigator .actions span.question{font-size:13px;margin:0 .5em;display:none}#all-items-action-toggle{display:none !important}.image-info{position:relative;float:right;box-sizing:border-box;width:28%;margin-top:0;border:0;border-radius:3px;background:var(--dca-white, var(--body-bg, #fff));box-shadow:0 0 5px 0 rgba(0,0,0,.2)}.image-info .image-details,.image-info .actions-list{margin:0;padding:0}.image-info .image-details.image-details,.image-info .actions-list.image-details{margin:10px 0;padding:0 10px}.image-info .image-details li,.image-info .actions-list li{list-style-type:none}.image-info .image-details a,.image-info .actions-list a{cursor:pointer}.image-info.image-info-detail:before,.image-info.image-info-detail:after{content:" ";display:table}.image-info.image-info-detail:after{clear:both}.image-info.image-info-detail{position:static;float:none;width:100%;margin-bottom:20px;padding:25px;border-radius:0}.image-info.image-info-detail+#content-main .object-tools{margin-top:20px;margin-right:20px;background-color:rgba(0,0,0,0)}.image-info.image-info-detail+#content-main .object-tools:before{display:none}.image-info.image-info-detail .image-details-left{float:left}.image-info.image-info-detail .image-details-right{float:left;margin-left:50px}.image-info.image-info-detail .image-details,.image-info.image-info-detail .actions-list{margin-top:0;border:0 !important}.image-info.image-info-detail .image-details.image-details,.image-info.image-info-detail .actions-list.image-details{margin-top:20px;margin-bottom:15px;padding:0}.image-info.image-info-detail .image-details dt,.image-info.image-info-detail .actions-list dt{float:left;color:var(--dca-gray-light, var(--body-quiet-color, #999));font-size:13px;line-height:1rem !important;font-weight:normal;margin-top:0}.image-info.image-info-detail .image-details dd,.image-info.image-info-detail .actions-list dd{color:var(--dca-gray, var(--body-quiet-color, #666));font-size:13px;line-height:16px !important;padding-left:80px;margin-bottom:5px}.image-info.image-info-detail .image-details .text,.image-info.image-info-detail .actions-list .text{font-size:13px;margin-right:15px}.image-info.image-info-detail .image-details .text strong,.image-info.image-info-detail .actions-list .text strong{font-size:13px}.image-info.image-info-detail .image-details li,.image-info.image-info-detail .actions-list li{color:var(--dca-gray, var(--body-quiet-color, #666));font-size:13px !important;font-weight:normal !important;padding:1px 0 !important;border:0 !important}.image-info.image-info-detail .image-details a,.image-info.image-info-detail .actions-list a{padding:0}.image-info.image-info-detail .image-info-title{overflow:hidden;color:var(--dca-gray, var(--body-quiet-color, #666));white-space:nowrap;text-overflow:ellipsis;padding:0 0 5px}.image-info.image-info-detail .image-info-title .icon{float:left;margin-right:5px}.image-info.image-info-detail .image-preview-container{text-align:left;margin:20px 0 0;padding:0}.image-info.image-info-detail .image-preview-container>img{margin-bottom:15px}.image-info.image-info-detail .actions-list .icon{font-size:16px}.image-info.image-info-detail .actions-list .icon:last-child{float:none}@media screen and (max-width: 720px){.image-info{float:none;width:100%}.image-info.image-info-detail .image-details-left,.image-info.image-info-detail .image-details-right{float:none;margin-left:0}}.image-info-close{position:absolute;top:-10px;right:-7px;font-size:20px;cursor:pointer}.image-info-title{padding:5px 10px;border-bottom:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}.image-info-title a{margin-left:5px}.image-preview-container{text-align:center;margin:10px 0;padding:0 10px}.image-preview-container .image-preview{display:inline-block;position:relative;margin-bottom:15px;outline:1px solid var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2));background-image:url("data:image/gif;base64,R0lGODlhCAAIAKECAOPj4/z8/P///////yH5BAEKAAIALAAAAAAIAAgAAAINhBEZh8q6DoTPSWvoKQA7")}.image-preview-container .image-preview img{display:block}.image-preview-container .image-preview-field{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.image-preview-container .image-preview-circle{position:relative;z-index:1;width:26px;height:26px;border:solid 2px red;margin:-13px;border-radius:30px;cursor:move;background:hsla(0,0%,100%,.5)}.image-preview-container audio,.image-preview-container video{margin-bottom:15px}.image-preview-container audio:focus,.image-preview-container video:focus{outline:none}.button-group .button{margin-right:10px;padding:10px 15px}.actions-list-dropdown a{display:block;padding:5px 10px}.actions-list-dropdown .caret-down{display:inline-block}.actions-list-dropdown .caret-right{display:none}.actions-list-dropdown.js-collapsed{border-bottom:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}.actions-list-dropdown.js-collapsed .caret-down{display:none}.actions-list-dropdown.js-collapsed .caret-right{display:inline-block}.actions-list{border-top:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}.actions-list:last-child{border-top:none}.actions-list:last-child a{border-bottom:none}.actions-list a{display:block;font-size:20px;padding:5px 10px;border-bottom:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}.actions-list .icon:first-child{width:20px}.actions-list .icon:last-child{float:right;margin-top:3px}.actions-separated-list{display:inline-block;margin:0;padding-left:0}@media screen and (max-width: 720px){.actions-separated-list{float:left;margin-left:0}}.actions-separated-list li{display:inline-block;line-height:34px;vertical-align:middle;padding:0 10px;list-style:none}@media screen and (max-width: 720px){.actions-separated-list li:first-child{padding-left:0}}.actions-separated-list li span{vertical-align:middle}.actions-separated-list li a{color:var(--dca-gray, var(--body-quiet-color, #666))}.actions-separated-list span:before{font-size:18px}.search-is-focused .filter-files-container{position:static}.search-is-focused .filter-filers-container-inner{position:absolute;top:0;left:0;right:0}@media screen and (max-width: 720px){.search-is-focused .filter-filers-container-inner{position:static}}.search-is-focused .breadcrumbs-container{position:relative}.search-is-focused.breadcrumb-min-width .filter-filers-container-inner{position:static}.filter-files-container:before,.filter-files-container:after{content:" ";display:table}.filter-files-container:after{clear:both}.filter-files-container{display:table-cell;vertical-align:middle;position:relative;width:245px;margin:0;padding:0;background:none;box-shadow:none;z-index:1000}@media screen and (max-width: 720px){.filter-files-container{display:block;width:auto;margin-right:0;margin-top:10px}.filter-files-container .filter-files-button{float:none}}.filter-files-container .filer-dropdown-container{position:absolute;top:0;right:0}.filter-files-container .filer-dropdown-container>a,.filter-files-container .filer-dropdown-container>a:visited,.filter-files-container .filer-dropdown-container>a:link:visited,.filter-files-container .filer-dropdown-container>a:link{display:inline-block;line-height:34px;text-align:center;width:34px;height:34px;padding:0}.filter-files-container .filer-dropdown-container.open+.filer-dropdown-menu-checkboxes{display:block;width:calc(100% - 30px)}.filter-files-container .filer-dropdown-container.open+.filer-dropdown-menu-checkboxes li{margin:0;padding:0;list-style-type:none}.filter-files-container .filter-search-wrapper{position:relative;float:left;text-align:right;width:calc(100% - 43px);margin-right:5px}@media screen and (max-width: 720px){.filter-files-container .filter-search-wrapper{float:left}}.filter-files-container .filter-search-wrapper .filer-dropdown-container span{line-height:34px !important;height:34px !important}.filter-files-container .filter-files-button{float:right;text-align:center;white-space:nowrap;height:35px;margin:0;padding:8px !important}.filter-files-container .filter-files-button .icon{position:relative;left:2px;font-size:16px !important;vertical-align:top}.filter-files-container .filter-files-field{color:var(--dca-gray-darkest, var(--body-fg, #333));font-size:12px !important;line-height:35px;font-weight:normal;box-sizing:border-box;min-width:200px !important;height:35px;margin:0;padding:0 35px 0 10px !important;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;transition:max-width 200ms}.filter-files-container .filter-files-field::-ms-clear{display:none}.filter-files-container .filer-dropdown-menu{margin-top:0 !important;margin-right:-1px !important}.filter-files-cancel{margin:5px 20px}body.dz-drag-hover .drag-hover-border{display:none !important}body.dz-drag-hover .navigator-table tbody td,body.dz-drag-hover .navigator-table tbody .unfiled td{background-color:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)) !important}body.reset-hover td{background-color:var(--dca-white, var(--body-bg, #fff)) !important}.drag-hover-border{position:fixed;border-top:solid 2px var(--dca-primary, var(--primary, #0bf));border-bottom:solid 2px var(--dca-primary, var(--primary, #0bf));pointer-events:none;z-index:100;display:none}.thumbnail-drag-hover-border{border:solid 2px var(--dca-primary, var(--primary, #0bf))}.filebrowser .navigator-list,.filebrowser .navigator-table{width:100%;margin:0;border-top:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd)) !important;border-collapse:collapse !important}.filebrowser .navigator-list .navigator-header,.filebrowser .navigator-list thead th,.filebrowser .navigator-list tbody td,.filebrowser .navigator-table .navigator-header,.filebrowser .navigator-table thead th,.filebrowser .navigator-table tbody td{text-align:left;font-weight:normal;vertical-align:middle;padding:5px !important;border-left:0 !important;border-bottom:1px solid var(--dca-gray-lighter, var(--border-color, #ddd));border-top:1px solid rgba(0,0,0,0);background:none !important}.filebrowser .navigator-list tbody tr.selected .action-button span,.filebrowser .navigator-table tbody tr.selected .action-button span{color:var(--dca-gray-darkest, var(--body-fg, #333)) !important}.filebrowser .navigator-list .navigator-body,.filebrowser .navigator-list .unfiled td,.filebrowser .navigator-table .navigator-body,.filebrowser .navigator-table .unfiled td{padding:12px 5px !important;background-color:var(--dca-gray-super-lightest, var(--darkened-bg, #f7f7f7)) !important}.filebrowser .navigator-list .navigator-body a,.filebrowser .navigator-list .navigator-body a:hover,.filebrowser .navigator-list .unfiled td a,.filebrowser .navigator-list .unfiled td a:hover,.filebrowser .navigator-table .navigator-body a,.filebrowser .navigator-table .navigator-body a:hover,.filebrowser .navigator-table .unfiled td a,.filebrowser .navigator-table .unfiled td a:hover{color:var(--dca-gray, var(--body-quiet-color, #666)) !important}.filebrowser .navigator-list .column-checkbox,.filebrowser .navigator-table .column-checkbox{text-align:center;width:20px;padding-left:20px !important}.filebrowser .navigator-list .column-checkbox input,.filebrowser .navigator-table .column-checkbox input{vertical-align:middle;margin:0}.filebrowser .navigator-list .column-name a,.filebrowser .navigator-table .column-name a{color:var(--dca-primary, var(--primary, #0bf))}.filebrowser .navigator-list .column-icon,.filebrowser .navigator-table .column-icon{width:50px;padding-top:0 !important;padding-bottom:0 !important}.filebrowser .navigator-list .column-action,.filebrowser .navigator-table .column-action{text-align:center;width:90px;white-space:nowrap;padding-right:20px !important}.filebrowser .navigator-list .column-action a,.filebrowser .navigator-table .column-action a{font-size:16px !important;margin:0}.filebrowser .navigator-list .column-action .action-button,.filebrowser .navigator-table .column-action .action-button{background-image:none !important;margin-bottom:0;border-radius:var(--button-radius, 3px) !important;color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border:1px solid var(--dca-gray-lighter, transparent) !important;background-clip:padding-box;-webkit-appearance:none}.filebrowser .navigator-list .column-action .action-button:focus,.filebrowser .navigator-list .column-action .action-button.focus,.filebrowser .navigator-list .column-action .action-button:hover,.filebrowser .navigator-table .column-action .action-button:focus,.filebrowser .navigator-table .column-action .action-button.focus,.filebrowser .navigator-table .column-action .action-button:hover{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)) !important;border-color:var(--dca-gray-lighter, transparent) !important;text-decoration:none !important}.filebrowser .navigator-list .column-action .action-button:active,.filebrowser .navigator-list .column-action .action-button.cms-btn-active,.filebrowser .navigator-table .column-action .action-button:active,.filebrowser .navigator-table .column-action .action-button.cms-btn-active{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;filter:brightness(var(--active-brightness)) opacity(1) !important;box-shadow:inset 0 3px 5px rgba(var(--dca-black, var(--body-fg, #000)), 0.125) !important}.filebrowser .navigator-list .column-action .action-button:active:hover,.filebrowser .navigator-list .column-action .action-button:active:focus,.filebrowser .navigator-list .column-action .action-button:active.focus,.filebrowser .navigator-list .column-action .action-button.cms-btn-active:hover,.filebrowser .navigator-list .column-action .action-button.cms-btn-active:focus,.filebrowser .navigator-list .column-action .action-button.cms-btn-active.focus,.filebrowser .navigator-table .column-action .action-button:active:hover,.filebrowser .navigator-table .column-action .action-button:active:focus,.filebrowser .navigator-table .column-action .action-button:active.focus,.filebrowser .navigator-table .column-action .action-button.cms-btn-active:hover,.filebrowser .navigator-table .column-action .action-button.cms-btn-active:focus,.filebrowser .navigator-table .column-action .action-button.cms-btn-active.focus{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;filter:brightness(calc(var(--focus-brightness) * var(--active-brightness))) opacity(1) !important}.filebrowser .navigator-list .column-action .action-button:active,.filebrowser .navigator-list .column-action .action-button.cms-btn-active,.filebrowser .navigator-table .column-action .action-button:active,.filebrowser .navigator-table .column-action .action-button.cms-btn-active{background-image:none !important}.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled:hover,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled:focus,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled.focus,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled:active,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled.cms-btn-active,.filebrowser .navigator-list .column-action .action-button[disabled],.filebrowser .navigator-list .column-action .action-button[disabled]:hover,.filebrowser .navigator-list .column-action .action-button[disabled]:focus,.filebrowser .navigator-list .column-action .action-button[disabled].focus,.filebrowser .navigator-list .column-action .action-button[disabled]:active,.filebrowser .navigator-list .column-action .action-button[disabled].cms-btn-active,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled:hover,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled:focus,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled.focus,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled:active,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled.cms-btn-active,.filebrowser .navigator-table .column-action .action-button[disabled],.filebrowser .navigator-table .column-action .action-button[disabled]:hover,.filebrowser .navigator-table .column-action .action-button[disabled]:focus,.filebrowser .navigator-table .column-action .action-button[disabled].focus,.filebrowser .navigator-table .column-action .action-button[disabled]:active,.filebrowser .navigator-table .column-action .action-button[disabled].cms-btn-active{background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;color:var(--dca-gray-light, var(--button-fg, #999)) true;filter:brightness(0.6) opacity(1);cursor:not-allowed;box-shadow:none !important}.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled:before,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled:hover:before,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled:focus:before,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled.focus:before,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled:active:before,.filebrowser .navigator-list .column-action .action-button.cms-btn-disabled.cms-btn-active:before,.filebrowser .navigator-list .column-action .action-button[disabled]:before,.filebrowser .navigator-list .column-action .action-button[disabled]:hover:before,.filebrowser .navigator-list .column-action .action-button[disabled]:focus:before,.filebrowser .navigator-list .column-action .action-button[disabled].focus:before,.filebrowser .navigator-list .column-action .action-button[disabled]:active:before,.filebrowser .navigator-list .column-action .action-button[disabled].cms-btn-active:before,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled:before,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled:hover:before,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled:focus:before,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled.focus:before,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled:active:before,.filebrowser .navigator-table .column-action .action-button.cms-btn-disabled.cms-btn-active:before,.filebrowser .navigator-table .column-action .action-button[disabled]:before,.filebrowser .navigator-table .column-action .action-button[disabled]:hover:before,.filebrowser .navigator-table .column-action .action-button[disabled]:focus:before,.filebrowser .navigator-table .column-action .action-button[disabled].focus:before,.filebrowser .navigator-table .column-action .action-button[disabled]:active:before,.filebrowser .navigator-table .column-action .action-button[disabled].cms-btn-active:before{color:var(--dca-gray-light, var(--button-fg, #999)) true;filter:brightness(0.6) opacity(1)}.filebrowser .navigator-list .column-action .action-button,.filebrowser .navigator-table .column-action .action-button{margin:3px;padding:2px 6px 8px !important}.filebrowser .navigator-list .column-action .action-button span,.filebrowser .navigator-table .column-action .action-button span{font-size:17px;line-height:33px;vertical-align:middle}.filebrowser .navigator-list .no-files,.filebrowser .navigator-table .no-files{color:var(--dca-gray, var(--body-quiet-color, #666));font-size:14px;text-align:center;padding:40px 0 !important;background-color:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)) !important}.filebrowser .navigator-list .no-files span,.filebrowser .navigator-table .no-files span{font-size:20px;margin-right:10px}.filebrowser .navigator-list .no-files span:before,.filebrowser .navigator-table .no-files span:before{vertical-align:sub}.filebrowser .navigator-list .dz-drag-hover td,.filebrowser .navigator-table .dz-drag-hover td{position:relative;background:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)) !important;box-sizing:border-box !important}.filebrowser .navigator-list .dz-drag-hover td a.icon,.filebrowser .navigator-table .dz-drag-hover td a.icon{color:var(--dca-gray-darkest, var(--body-fg, #333)) !important;background-color:var(--dca-white, var(--body-bg, #fff)) !important}.filebrowser .navigator-list .dz-drag-hover td a,.filebrowser .navigator-table .dz-drag-hover td a{color:var(--dca-primary, var(--primary, #0bf)) !important}.filebrowser .navigator-list.dz-drag-hover,.filebrowser .navigator-table.dz-drag-hover{position:relative}.filebrowser .navigator-list.dz-drag-hover .drag-hover-border,.filebrowser .navigator-table.dz-drag-hover .drag-hover-border{display:none !important}.filebrowser .navigator-list.dz-drag-hover td,.filebrowser .navigator-table.dz-drag-hover td{background:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)) !important;box-sizing:border-box !important}.filebrowser .navigator-list .reset-hover td,.filebrowser .navigator-list.reset-hover td,.filebrowser .navigator-table .reset-hover td,.filebrowser .navigator-table.reset-hover td{background-color:var(--dca-white, var(--body-bg, #fff)) !important}.filebrowser .navigator-list .reset-hover .dz-drag-hover td,.filebrowser .navigator-list.reset-hover .dz-drag-hover td,.filebrowser .navigator-table .reset-hover .dz-drag-hover td,.filebrowser .navigator-table.reset-hover .dz-drag-hover td{background:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)) !important}.navigator-top-nav{position:relative;clear:both;min-height:35px;padding:15px 20px;background:var(--dca-gray-super-lightest, var(--darkened-bg, #f7f7f7));border-bottom:var(--dca-gray-lighter, var(--border-color, #ddd)) solid 1px}.navigator-top-nav .breadcrumbs-container-wrapper{display:table;width:100%}@media screen and (max-width: 720px){.navigator-top-nav .breadcrumbs-container-wrapper{display:block}}.navigator-top-nav .breadcrumbs-container-inner{display:table;table-layout:fixed;width:100%}.navigator-top-nav .breadcrumbs-container-inner .filer-dropdown-container{display:table-cell;width:30px;height:35px;vertical-align:middle}.navigator-top-nav .breadcrumbs-container-inner .filer-dropdown-container span{line-height:35px;height:35px;vertical-align:middle}.navigator-top-nav .breadcrumbs-container{display:table-cell;vertical-align:middle}@media screen and (max-width: 720px){.navigator-top-nav .breadcrumbs-container{position:static;margin-right:20px}}.navigator-top-nav .tools-container:before,.navigator-top-nav .tools-container:after{content:" ";display:table}.navigator-top-nav .tools-container:after{clear:both}.navigator-top-nav .tools-container{display:table-cell;vertical-align:middle;text-align:right;margin-top:2px}@media screen and (max-width: 720px){.navigator-top-nav .tools-container{display:inline;text-align:left}}.navigator-top-nav .nav-button{display:inline-block;color:var(--dca-gray, var(--body-quiet-color, #666));font-size:20px;line-height:34px;vertical-align:top;margin:0 10px}.navigator-top-nav .nav-button span{vertical-align:middle}.navigator-top-nav .nav-button-filter{position:relative;top:-1px}.navigator-top-nav .nav-button-dots{margin:0;padding:0 15px}.navigator-top-nav .separator{display:inline-block;position:relative;vertical-align:top;width:1px;height:34px;margin:0 5px}.navigator-top-nav .separator:before{content:"";display:block;position:absolute;top:-14px;bottom:-11px;overflow:hidden;width:1px;background-color:var(--dca-gray-lighter, var(--border-color, #ddd))}.breadcrumb-min-width .filer-navigator-breadcrumbs-dropdown-container,.breadcrumb-min-width .navigator-breadcrumbs-name-dropdown-wrapper,.breadcrumb-min-width .navigator-breadcrumbs-folder-name-wrapper,.breadcrumb-min-width .breadcrumbs-container-wrapper,.breadcrumb-min-width .breadcrumbs-container,.breadcrumb-min-width .tools-container,.breadcrumb-min-width .filter-files-container,.breadcrumb-min-width .navigator-breadcrumbs,.breadcrumb-min-width .navigator-button-wrapper{display:inline-block;text-align:left}.breadcrumb-min-width .filer-navigator-breadcrumbs-dropdown-container .actions-wrapper,.breadcrumb-min-width .navigator-breadcrumbs-name-dropdown-wrapper .actions-wrapper,.breadcrumb-min-width .navigator-breadcrumbs-folder-name-wrapper .actions-wrapper,.breadcrumb-min-width .breadcrumbs-container-wrapper .actions-wrapper,.breadcrumb-min-width .breadcrumbs-container .actions-wrapper,.breadcrumb-min-width .tools-container .actions-wrapper,.breadcrumb-min-width .filter-files-container .actions-wrapper,.breadcrumb-min-width .navigator-breadcrumbs .actions-wrapper,.breadcrumb-min-width .navigator-button-wrapper .actions-wrapper{white-space:nowrap;margin-left:0;margin-top:10px}.breadcrumb-min-width .filer-navigator-breadcrumbs-dropdown-container .actions-wrapper li:first-child,.breadcrumb-min-width .navigator-breadcrumbs-name-dropdown-wrapper .actions-wrapper li:first-child,.breadcrumb-min-width .navigator-breadcrumbs-folder-name-wrapper .actions-wrapper li:first-child,.breadcrumb-min-width .breadcrumbs-container-wrapper .actions-wrapper li:first-child,.breadcrumb-min-width .breadcrumbs-container .actions-wrapper li:first-child,.breadcrumb-min-width .tools-container .actions-wrapper li:first-child,.breadcrumb-min-width .filter-files-container .actions-wrapper li:first-child,.breadcrumb-min-width .navigator-breadcrumbs .actions-wrapper li:first-child,.breadcrumb-min-width .navigator-button-wrapper .actions-wrapper li:first-child{padding-left:0}.breadcrumb-min-width .navigator-button-wrapper{margin-top:10px}.breadcrumb-min-width .navigator-breadcrumbs-name-dropdown-wrapper{min-height:inherit}.breadcrumb-min-width .navigator-breadcrumbs-name-dropdown-wrapper .filer-dropdown-container .fa-caret-down{vertical-align:text-top}.breadcrumb-min-width .breadcrumbs-container-inner .filer-dropdown-container{display:inline-block !important}.breadcrumb-min-width .navigator-tools{white-space:normal}.breadcrumb-min-width .filter-files-container{width:100%;margin-top:10px;z-index:auto}.breadcrumb-min-width .breadcrumbs-container{margin-right:0}.breadcrumb-min-width .navigator-breadcrumbs .icon{vertical-align:middle}.breadcrumb-min-width .navigator-breadcrumbs-folder-name-wrapper{float:left;width:calc(100% - 30px)}.navigator-tools:before,.navigator-tools:after{content:" ";display:table}.navigator-tools:after{clear:both}.navigator-tools{white-space:nowrap}@media screen and (max-width: 720px){.navigator-tools{display:inline}}.navigator-tools .actions-wrapper{display:inline-block;margin-bottom:0;margin-left:10px}.navigator-tools .actions-wrapper a,.navigator-tools .actions-wrapper a:hover{color:var(--dca-gray-light, var(--body-quiet-color, #999)) !important;cursor:not-allowed}@media screen and (max-width: 720px){.navigator-tools .actions-wrapper:before,.navigator-tools .actions-wrapper:after{content:" ";display:table}.navigator-tools .actions-wrapper:after{clear:both}.navigator-tools .actions-wrapper{float:none;margin-left:0}}.navigator-tools .actions-wrapper.action-selected a{color:var(--dca-gray, var(--body-quiet-color, #666)) !important;cursor:pointer}.navigator-tools .actions-wrapper.action-selected .actions-separated-list{display:inline-block}.navigator-tools .actions-wrapper+.filer-list-type-switcher-wrapper{border-left:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd));margin-left:0}.navigator-tools .actions{display:none;float:right}@media screen and (max-width: 720px){.navigator-tools .actions:before,.navigator-tools .actions:after{content:" ";display:table}.navigator-tools .actions:after{clear:both}.navigator-tools .actions{float:none;margin-bottom:10px}}.navigator-tools .actions .all,.navigator-tools .actions .question,.navigator-tools .actions .clear,.navigator-tools .actions .action-counter{font-size:12px;line-height:34px;vertical-align:text-top}.navigator-tools .actions .action-counter,.navigator-tools .actions .all{color:var(--dca-gray-light, var(--body-quiet-color, #999))}.navigator-tools .actions .question,.navigator-tools .actions .clear{margin-left:10px;padding-left:10px;border-left:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}.navigator-tools .filer-list-type-switcher-wrapper{display:inline-block;margin-left:10px}@media screen and (max-width: 720px){.navigator-top-nav .breadcrumbs-container{float:none}.navigator-top-nav .navigator-tools{float:none}.navigator-top-nav .navigator-tools .separator:before{top:0;bottom:0}}.navigator-button-wrapper{display:inline-block;vertical-align:top;text-align:right;margin-bottom:0;margin-left:10px}@media screen and (max-width: 720px){.navigator-button-wrapper{display:block;float:none;text-align:left;margin-top:0;margin-left:0}}.navigator-button{margin-right:10px}.navigator-button,.navigator-button:visited,.navigator-button:link:visited,.navigator-button:link{background-image:none !important;margin-bottom:0;border-radius:var(--button-radius, 3px) !important;color:var(--default-button-fg, var(--button-fg, #fff)) !important;background-color:var(--default-button-bg) !important;border:1px solid var(--dca-black, var(--body-fg, #000)) !important;background-clip:padding-box;-webkit-appearance:none}.navigator-button:focus,.navigator-button.focus,.navigator-button:hover,.navigator-button:visited:focus,.navigator-button:visited.focus,.navigator-button:visited:hover,.navigator-button:link:visited:focus,.navigator-button:link:visited.focus,.navigator-button:link:visited:hover,.navigator-button:link:focus,.navigator-button:link.focus,.navigator-button:link:hover{color:var(--default-button-fg, var(--button-fg, #fff)) !important;background-color:var(--default-button-bg) !important;border-color:var(--dca-black, var(--body-fg, #000)) !important;filter:invert(0.05) !important;text-decoration:none !important}.navigator-button:active,.navigator-button.cms-btn-active,.navigator-button:visited:active,.navigator-button:visited.cms-btn-active,.navigator-button:link:visited:active,.navigator-button:link:visited.cms-btn-active,.navigator-button:link:active,.navigator-button:link.cms-btn-active{color:var(--default-button-fg, var(--button-fg, #fff)) !important;background-color:var(--default-button-bg) !important;border-color:var(--dca-black, var(--body-fg, #000)) !important;filter:brightness(var(--active-brightness)) opacity(1) !important;box-shadow:inset 0 3px 5px rgba(var(--dca-black, var(--body-fg, #000)), 0.125) !important}.navigator-button:active:hover,.navigator-button:active:focus,.navigator-button:active.focus,.navigator-button.cms-btn-active:hover,.navigator-button.cms-btn-active:focus,.navigator-button.cms-btn-active.focus,.navigator-button:visited:active:hover,.navigator-button:visited:active:focus,.navigator-button:visited:active.focus,.navigator-button:visited.cms-btn-active:hover,.navigator-button:visited.cms-btn-active:focus,.navigator-button:visited.cms-btn-active.focus,.navigator-button:link:visited:active:hover,.navigator-button:link:visited:active:focus,.navigator-button:link:visited:active.focus,.navigator-button:link:visited.cms-btn-active:hover,.navigator-button:link:visited.cms-btn-active:focus,.navigator-button:link:visited.cms-btn-active.focus,.navigator-button:link:active:hover,.navigator-button:link:active:focus,.navigator-button:link:active.focus,.navigator-button:link.cms-btn-active:hover,.navigator-button:link.cms-btn-active:focus,.navigator-button:link.cms-btn-active.focus{color:var(--default-button-fg, var(--button-fg, #fff)) !important;background-color:var(--default-button-bg) !important;border-color:var(--dca-black, var(--body-fg, #000)) !important;filter:brightness(calc(var(--focus-brightness) * var(--active-brightness))) opacity(1) !important}.navigator-button:active,.navigator-button.cms-btn-active,.navigator-button:visited:active,.navigator-button:visited.cms-btn-active,.navigator-button:link:visited:active,.navigator-button:link:visited.cms-btn-active,.navigator-button:link:active,.navigator-button:link.cms-btn-active{background-image:none !important}.navigator-button.cms-btn-disabled,.navigator-button.cms-btn-disabled:hover,.navigator-button.cms-btn-disabled:focus,.navigator-button.cms-btn-disabled.focus,.navigator-button.cms-btn-disabled:active,.navigator-button.cms-btn-disabled.cms-btn-active,.navigator-button[disabled],.navigator-button[disabled]:hover,.navigator-button[disabled]:focus,.navigator-button[disabled].focus,.navigator-button[disabled]:active,.navigator-button[disabled].cms-btn-active,.navigator-button:visited.cms-btn-disabled,.navigator-button:visited.cms-btn-disabled:hover,.navigator-button:visited.cms-btn-disabled:focus,.navigator-button:visited.cms-btn-disabled.focus,.navigator-button:visited.cms-btn-disabled:active,.navigator-button:visited.cms-btn-disabled.cms-btn-active,.navigator-button:visited[disabled],.navigator-button:visited[disabled]:hover,.navigator-button:visited[disabled]:focus,.navigator-button:visited[disabled].focus,.navigator-button:visited[disabled]:active,.navigator-button:visited[disabled].cms-btn-active,.navigator-button:link:visited.cms-btn-disabled,.navigator-button:link:visited.cms-btn-disabled:hover,.navigator-button:link:visited.cms-btn-disabled:focus,.navigator-button:link:visited.cms-btn-disabled.focus,.navigator-button:link:visited.cms-btn-disabled:active,.navigator-button:link:visited.cms-btn-disabled.cms-btn-active,.navigator-button:link:visited[disabled],.navigator-button:link:visited[disabled]:hover,.navigator-button:link:visited[disabled]:focus,.navigator-button:link:visited[disabled].focus,.navigator-button:link:visited[disabled]:active,.navigator-button:link:visited[disabled].cms-btn-active,.navigator-button:link.cms-btn-disabled,.navigator-button:link.cms-btn-disabled:hover,.navigator-button:link.cms-btn-disabled:focus,.navigator-button:link.cms-btn-disabled.focus,.navigator-button:link.cms-btn-disabled:active,.navigator-button:link.cms-btn-disabled.cms-btn-active,.navigator-button:link[disabled],.navigator-button:link[disabled]:hover,.navigator-button:link[disabled]:focus,.navigator-button:link[disabled].focus,.navigator-button:link[disabled]:active,.navigator-button:link[disabled].cms-btn-active{background-color:var(--default-button-bg) !important;border-color:var(--dca-black, var(--body-fg, #000)) !important;color:var(--default-button-fg, var(--button-fg, #fff)) true;filter:brightness(0.6) opacity(1);cursor:not-allowed;box-shadow:none !important}.navigator-button.cms-btn-disabled:before,.navigator-button.cms-btn-disabled:hover:before,.navigator-button.cms-btn-disabled:focus:before,.navigator-button.cms-btn-disabled.focus:before,.navigator-button.cms-btn-disabled:active:before,.navigator-button.cms-btn-disabled.cms-btn-active:before,.navigator-button[disabled]:before,.navigator-button[disabled]:hover:before,.navigator-button[disabled]:focus:before,.navigator-button[disabled].focus:before,.navigator-button[disabled]:active:before,.navigator-button[disabled].cms-btn-active:before,.navigator-button:visited.cms-btn-disabled:before,.navigator-button:visited.cms-btn-disabled:hover:before,.navigator-button:visited.cms-btn-disabled:focus:before,.navigator-button:visited.cms-btn-disabled.focus:before,.navigator-button:visited.cms-btn-disabled:active:before,.navigator-button:visited.cms-btn-disabled.cms-btn-active:before,.navigator-button:visited[disabled]:before,.navigator-button:visited[disabled]:hover:before,.navigator-button:visited[disabled]:focus:before,.navigator-button:visited[disabled].focus:before,.navigator-button:visited[disabled]:active:before,.navigator-button:visited[disabled].cms-btn-active:before,.navigator-button:link:visited.cms-btn-disabled:before,.navigator-button:link:visited.cms-btn-disabled:hover:before,.navigator-button:link:visited.cms-btn-disabled:focus:before,.navigator-button:link:visited.cms-btn-disabled.focus:before,.navigator-button:link:visited.cms-btn-disabled:active:before,.navigator-button:link:visited.cms-btn-disabled.cms-btn-active:before,.navigator-button:link:visited[disabled]:before,.navigator-button:link:visited[disabled]:hover:before,.navigator-button:link:visited[disabled]:focus:before,.navigator-button:link:visited[disabled].focus:before,.navigator-button:link:visited[disabled]:active:before,.navigator-button:link:visited[disabled].cms-btn-active:before,.navigator-button:link.cms-btn-disabled:before,.navigator-button:link.cms-btn-disabled:hover:before,.navigator-button:link.cms-btn-disabled:focus:before,.navigator-button:link.cms-btn-disabled.focus:before,.navigator-button:link.cms-btn-disabled:active:before,.navigator-button:link.cms-btn-disabled.cms-btn-active:before,.navigator-button:link[disabled]:before,.navigator-button:link[disabled]:hover:before,.navigator-button:link[disabled]:focus:before,.navigator-button:link[disabled].focus:before,.navigator-button:link[disabled]:active:before,.navigator-button:link[disabled].cms-btn-active:before{color:var(--default-button-fg, var(--button-fg, #fff)) true;filter:brightness(0.6) opacity(1)}.navigator-button,.navigator-button:visited,.navigator-button:link:visited,.navigator-button:link{display:inline-block;vertical-align:top;padding:10px 20px !important}.navigator-button .icon{position:relative;margin-right:3px}.navigator-button .fa-folder{top:0}.navigator-button.navigator-button-upload{margin-right:0}.upload-button-disabled{display:inline-block}.navigator-button+.filer-dropdown-menu{margin-top:-2px}.navigator{position:relative;overflow-x:auto;width:100%}.navigator form{margin:0;padding:0;box-shadow:none}.filer-dropdown-container{display:inline-block;position:relative;vertical-align:top}.filer-dropdown-container .fa-caret-down,.filer-dropdown-container .cms-icon-caret-down{font-size:14px}.filer-dropdown-container .filer-dropdown-menu,.filer-dropdown-container+.filer-dropdown-menu{display:none;right:0;left:auto;border:0;box-shadow:0 1px 10px rgba(0,0,0,.25)}.filer-dropdown-container .filer-dropdown-menu>li>a,.filer-dropdown-container+.filer-dropdown-menu>li>a{display:block;color:var(--dca-primary, var(--primary, #0bf));font-weight:normal;white-space:normal;padding:12px 20px !important}@media screen and (min-width: 720px){.filer-dropdown-container .filer-dropdown-menu>li>a,.filer-dropdown-container+.filer-dropdown-menu>li>a{white-space:nowrap}}.filer-dropdown-container .filer-dropdown-menu label,.filer-dropdown-container+.filer-dropdown-menu label{display:block;line-height:20px !important;text-transform:none;width:auto;margin:5px 0 !important;padding:0 10px !important}.filer-dropdown-container .filer-dropdown-menu input,.filer-dropdown-container+.filer-dropdown-menu input{position:relative;top:4px;vertical-align:top;margin-right:5px}.filer-dropdown-container .filer-dropdown-menu.filer-dropdown-menu-checkboxes,.filer-dropdown-container+.filer-dropdown-menu.filer-dropdown-menu-checkboxes{width:0;min-height:50px;padding:15px;border:0;box-shadow:0 1px 10px rgba(0,0,0,.25)}.filer-dropdown-container .filer-dropdown-menu.filer-dropdown-menu-checkboxes:before,.filer-dropdown-container+.filer-dropdown-menu.filer-dropdown-menu-checkboxes:before{display:none}.filer-dropdown-container .filer-dropdown-menu.filer-dropdown-menu-checkboxes .fa-close,.filer-dropdown-container+.filer-dropdown-menu.filer-dropdown-menu-checkboxes .fa-close{position:absolute;top:10px;right:10px;color:var(--dca-gray, var(--body-quiet-color, #666));cursor:pointer}.filer-dropdown-container .filer-dropdown-menu.filer-dropdown-menu-checkboxes .fa-close:hover,.filer-dropdown-container+.filer-dropdown-menu.filer-dropdown-menu-checkboxes .fa-close:hover{color:var(--dca-primary, var(--primary, #0bf))}.filer-dropdown-container .filer-dropdown-menu.filer-dropdown-menu-checkboxes p,.filer-dropdown-container+.filer-dropdown-menu.filer-dropdown-menu-checkboxes p{color:var(--dca-gray-light, var(--body-quiet-color, #999)) !important;font-weight:normal;text-transform:uppercase;margin-bottom:5px}.filer-dropdown-container .filer-dropdown-menu.filer-dropdown-menu-checkboxes label,.filer-dropdown-container+.filer-dropdown-menu.filer-dropdown-menu-checkboxes label{color:var(--dca-gray, var(--body-quiet-color, #666)) !important;font-weight:normal;padding:0 !important;margin-top:0 !important}.filer-dropdown-container .filer-dropdown-menu.filer-dropdown-menu-checkboxes label input,.filer-dropdown-container+.filer-dropdown-menu.filer-dropdown-menu-checkboxes label input{margin-left:0}.filer-dropdown-container .filer-dropdown-menu a:hover,.filer-dropdown-container+.filer-dropdown-menu a:hover{color:var(--dca-white, var(--body-bg, #fff)) !important;background:var(--dca-primary, var(--primary, #0bf)) !important}.filer-dropdown-container.open .filer-dropdown-menu{display:block}.filer-dropdown-container.open .filer-dropdown-menu li{margin:0;padding:0;list-style-type:none}.filer-dropdown-container+.separator{margin-right:10px}.filer-dropdown-container-down>a,.filer-dropdown-container-down>a:link,.filer-dropdown-container-down>a:visited,.filer-dropdown-container-down>a:link:visited{color:var(--dca-gray, var(--body-quiet-color, #666));font-size:20px;line-height:35px;height:35px;padding:0 10px}.filer-dropdown-container-down .filer-dropdown-menu{right:auto;left:-14px;margin-right:10px}.filer-dropdown-menu{position:absolute;top:100%;z-index:1000;display:none;float:left;min-width:160px;margin:2px 0 0;margin-top:0 !important;padding:0;list-style:none;font-size:14px;text-align:left;background-color:var(--dca-white, var(--body-bg, #fff));border-radius:4px;background-clip:padding-box}.filer-dropdown-menu:before{position:absolute;top:-5px;left:35px;z-index:-1;content:"";width:10px;height:10px;margin-left:-5px;transform:rotate(45deg);background-color:var(--dca-white, var(--body-bg, #fff))}.filer-dropdown-menu.create-menu-dropdown:before{left:auto;right:17px}.navigator-breadcrumbs:before,.navigator-breadcrumbs:after{content:" ";display:table}.navigator-breadcrumbs:after{clear:both}.navigator-breadcrumbs{display:table-cell;vertical-align:middle;font-size:16px;white-space:nowrap;width:60px}.navigator-breadcrumbs>a{color:var(--dca-gray-darkest, var(--body-fg, #333)) !important}.navigator-breadcrumbs .icon{color:var(--dca-gray-light, var(--body-quiet-color, #999));line-height:35px;height:35px;margin:0 5px}.navigator-breadcrumbs .icon:before{vertical-align:middle}.navigator-breadcrumbs li{list-style-type:none}.navigator-breadcrumbs-folder-name-wrapper{display:table-cell;overflow:hidden;font-size:16px;font-weight:bold;vertical-align:middle;white-space:nowrap}.navigator-breadcrumbs-folder-name{display:block;overflow:hidden;white-space:normal;line-height:35px;width:100%;height:35px}.navigator-breadcrumbs-folder-name-inner{display:block;position:relative;overflow:hidden;line-height:35px;height:35px;width:100%;text-overflow:ellipsis}.filer-navigator-breadcrumbs-dropdown-container{position:relative;float:left;vertical-align:middle;margin:0 7px 0 0}.filer-navigator-breadcrumbs-dropdown-container>a img{padding:3px 0}.filer-navigator-breadcrumbs-dropdown-container .navigator-breadcrumbs-dropdown{left:-15px !important;min-width:200px;padding:0;margin-top:0;border:0;box-shadow:0 1px 10px rgba(0,0,0,.25)}.filer-navigator-breadcrumbs-dropdown-container .navigator-breadcrumbs-dropdown>li{padding:0}.filer-navigator-breadcrumbs-dropdown-container .navigator-breadcrumbs-dropdown>li>a{color:var(--dca-primary, var(--primary, #0bf));padding:12px 20px 3px !important;border-bottom:solid 1px var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2))}.filer-navigator-breadcrumbs-dropdown-container .navigator-breadcrumbs-dropdown>li>a:hover{color:var(--dca-white, var(--body-bg, #fff)) !important;background:var(--dca-primary, var(--primary, #0bf)) !important}.filer-navigator-breadcrumbs-dropdown-container .navigator-breadcrumbs-dropdown>li:last-child>a{border-bottom:none}.filer-navigator-breadcrumbs-dropdown-container .navigator-breadcrumbs-dropdown img{position:relative;top:-5px;vertical-align:top;margin:0 10px 0 0}.navigator-dropdown-arrow-up{position:relative;left:20px;overflow:hidden;width:20px;height:20px;margin-top:-20px;z-index:1001}.navigator-dropdown-arrow-up:after{content:"";position:absolute;top:15px;left:5px;width:10px;height:10px;background:#fff;transform:rotate(45deg);box-shadow:0 1px 10px rgba(0,0,0,.25)}.navigator-breadcrumbs-name-dropdown-wrapper{display:table;min-height:35px}.navigator-breadcrumbs-name-dropdown-wrapper .filer-dropdown-menu{left:auto;right:-80px}.navigator-breadcrumbs-name-dropdown-wrapper .filer-dropdown-menu:before{right:80px;left:auto}.navigator-breadcrumbs-name-dropdown-wrapper a{display:inline-block}.empty-filer-header-cell{display:table-cell;vertical-align:middle}.filebrowser .navigator-thumbnail-list{overflow:hidden}.filebrowser .navigator-thumbnail-list .navigator-list{border-top:0 !important}.filebrowser .navigator-thumbnail-list .navigator-thumbnail-list-header>*{display:inline-block;text-transform:uppercase;margin:0;padding:0;padding-left:10px}.filebrowser .navigator-thumbnail-list .navigator-thumbnail-list-header .navigator-checkbox{float:right;padding-right:20px;text-transform:initial;color:var(--dca-primary, var(--primary, #0bf))}.filebrowser .navigator-thumbnail-list .navigator-thumbnail-list-header .navigator-checkbox input[type=checkbox]{margin-left:5px;vertical-align:middle}.filebrowser .navigator-thumbnail-list .navigator-body:before,.filebrowser .navigator-thumbnail-list .navigator-body:after{content:" ";display:table}.filebrowser .navigator-thumbnail-list .navigator-body:after{clear:both}.filebrowser .navigator-thumbnail-list .navigator-body{padding:0 !important}.filebrowser .navigator-thumbnail-list .thumbnail-item{float:left;display:inline-block;padding:10px;width:calc(var(--thumbnail-size, 120px) + 5px);height:calc(var(--thumbnail-size, 120px) + 5px);border:1px solid var(--dca-gray-lighter, var(--border-color, #ddd));margin:16px 12px;background-color:var(--dca-white, var(--body-bg, #fff));position:relative;overflow:hidden}.filebrowser .navigator-thumbnail-list .thumbnail-item .thumbnail-file-item-box{padding:10px;width:calc(var(--thumbnail-size, 120px) + 5px);height:calc(var(--thumbnail-size, 120px) + 5px);border:1px solid var(--dca-gray-lighter, var(--border-color, #ddd));margin:16px 12px;background-color:var(--dca-white, var(--body-bg, #fff))}.filebrowser .navigator-thumbnail-list .thumbnail-item .thumbnail-file-item-box:hover{background-color:#f1faff}.filebrowser .navigator-thumbnail-list .thumbnail-item .navigator-checkbox{position:absolute;top:5px;left:5px}.filebrowser .navigator-thumbnail-list .thumbnail-item .navigator-checkbox input{margin:0;vertical-align:top}.filebrowser .navigator-thumbnail-list .thumbnail-item .item-thumbnail,.filebrowser .navigator-thumbnail-list .thumbnail-item .item-icon{height:50%;width:50%;margin:10px auto;margin-bottom:18px}.filebrowser .navigator-thumbnail-list .thumbnail-item .item-thumbnail a,.filebrowser .navigator-thumbnail-list .thumbnail-item .item-icon a{display:block;height:100%;width:100%}.filebrowser .navigator-thumbnail-list .thumbnail-item .item-thumbnail img,.filebrowser .navigator-thumbnail-list .thumbnail-item .item-icon img{width:100%;height:100%}.filebrowser .navigator-thumbnail-list .thumbnail-item .item-name{background:rgba(0,0,0,0);text-align:center;word-break:break-word}.filebrowser .navigator-thumbnail-list .thumbnail-virtual-item{background-color:initial}.filebrowser .navigator-thumbnail-list .thumbnail-folder-item:hover{background-color:#f1faff}.filebrowser .navigator-thumbnail-list .thumbnail-file-item{float:none;width:calc(var(--thumbnail-size, 120px) + 27px);height:calc(var(--thumbnail-size, 120px) + 80px);border:0;padding:0;background-color:rgba(0,0,0,0)}.filebrowser .navigator-thumbnail-list .thumbnail-file-item .thumbnail-file-item-box{float:none;margin:0;margin-bottom:5px}.filebrowser .navigator-thumbnail-list .thumbnail-file-item .item-thumbnail{margin:0;height:100%;width:100%}.filebrowser .navigator-thumbnail-list .thumbnail-file-item .item-name{position:relative;word-break:break-word}.insertlinkButton:before{content:"" !important}.insertlinkButton span{font-size:17px}.popup.app-cmsplugin_filer_image .form-row.field-image .field-box,.popup.app-cmsplugin_filer_image .field-box.field-free_link,.popup.app-cmsplugin_filer_image .field-box.field-page_link,.popup.app-cmsplugin_filer_image .field-box.field-file_link{float:none !important;margin-right:0 !important;margin-top:20px !important}.popup.app-cmsplugin_filer_image .form-row.field-image .field-box:first-child,.popup.app-cmsplugin_filer_image .field-box.field-free_link:first-child,.popup.app-cmsplugin_filer_image .field-box.field-page_link:first-child,.popup.app-cmsplugin_filer_image .field-box.field-file_link:first-child{margin-top:0 !important}.popup.app-cmsplugin_filer_image .form-row.field-image .field-box input,.popup.app-cmsplugin_filer_image .field-box.field-free_link input,.popup.app-cmsplugin_filer_image .field-box.field-page_link input,.popup.app-cmsplugin_filer_image .field-box.field-file_link input{width:100% !important}.popup.app-cmsplugin_filer_image .form-row .field-box.field-crop,.popup.app-cmsplugin_filer_image .form-row .field-box.field-upscale{margin-top:30px}.popup.delete-confirmation .colM ul{margin-bottom:25px !important}.popup .image-info-detail{padding:0;padding-bottom:25px;margin-bottom:30px;box-shadow:none;border-bottom:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}.popup.change-list.filebrowser #result_list tbody th,.popup.change-list.filebrowser #result_list tbody td{height:auto}.popup .filer-dropzone{padding:5px 20px}.popup form .form-row .filer-dropzone .filerFile{top:8px}.popup.filebrowser #container #content{margin:0 !important}.popup .navigator-button-wrapper{float:right}@media screen and (max-width: 720px){.popup .navigator-button-wrapper{float:none}}.popup .navigator-top-nav .tools-container{width:70%}.popup .navigator-top-nav .breadcrumbs-container{width:30%}@media screen and (max-width: 720px){.popup .navigator-top-nav .tools-container,.popup .navigator-top-nav .breadcrumbs-container{width:100%}}form .form-row[class*=file] .related-widget-wrapper-link,form .form-row[class*=folder] .related-widget-wrapper-link,form .form-row[class*=img] .related-widget-wrapper-link,form .form-row[class*=image] .related-widget-wrapper-link,form .form-row[class*=visual] .related-widget-wrapper-link{display:none}form .form-row .filer-widget+.related-widget-wrapper-link,form .form-row .filer-widget+*+.related-widget-wrapper-link{display:none}form .form-row .related-widget-wrapper:has(.filer-widget,.filer-dropzone){width:100%}form .form-row .filer-dropzone:before,form .form-row .filer-dropzone:after{content:" ";display:table}form .form-row .filer-dropzone:after{clear:both}form .form-row .filer-dropzone{position:relative;min-width:320px;border:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd));border-radius:var(--dca-border-radius, 5px);background-color:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2));box-sizing:border-box !important}form .form-row .filer-dropzone .z-index-fix{position:absolute;top:0;right:0;bottom:0;left:0}form .form-row .filer-dropzone.dz-drag-hover{background-color:var(--dca-primary, var(--primary, #0bf));filter:brightness(1.5);border:solid 2px var(--dca-primary, var(--primary, #0bf)) !important}form .form-row .filer-dropzone.dz-drag-hover .z-index-fix{z-index:1}form .form-row .filer-dropzone.dz-drag-hover .dz-message{opacity:1;display:block !important;visibility:visible}form .form-row .filer-dropzone.dz-drag-hover .filerFile{display:none}form .form-row .filer-dropzone.dz-drag-hover .dz-message,form .form-row .filer-dropzone.dz-drag-hover .dz-message .icon{color:var(--dca-primary, var(--primary, #0bf)) !important}form .form-row .filer-dropzone.dz-started .fileUpload{display:none}form .form-row .filer-dropzone .dz-preview{width:100%;min-height:auto;margin-right:0;margin-bottom:0;margin-left:0;padding-bottom:10px;border-bottom:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}form .form-row .filer-dropzone .dz-preview.dz-error{position:relative}form .form-row .filer-dropzone .dz-preview.dz-error .dz-error-message{display:none}form .form-row .filer-dropzone .dz-preview.dz-error:hover .dz-error-message{display:block}form .form-row .filer-dropzone .dz-preview .dz-details{min-width:calc(100% - 80px);max-width:calc(100% - 80px);margin-top:7px;margin-left:40px;padding:0;opacity:1}form .form-row .filer-dropzone .dz-preview .dz-details .dz-filename,form .form-row .filer-dropzone .dz-preview .dz-details .dz-filename:hover,form .form-row .filer-dropzone .dz-preview .dz-details .dz-size{float:left;text-align:left}form .form-row .filer-dropzone .dz-preview .dz-details .dz-filename span,form .form-row .filer-dropzone .dz-preview .dz-details .dz-filename:hover span,form .form-row .filer-dropzone .dz-preview .dz-details .dz-size span{color:var(--dca-gray, var(--body-quiet-color, #666));border:0 !important;background-color:rgba(0,0,0,0) !important}form .form-row .filer-dropzone .dz-preview .dz-remove{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-trash' viewBox='0 0 16 16'%3E%3Cpath d='M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6Z'/%3E%3Cpath d='M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1ZM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118ZM2.5 3h11V2h-11v1Z'/%3E%3C/svg%3E%0A");background-size:contain;display:inline-block;position:absolute;top:7px;right:25px;font:0/0 a;width:18px;height:18px}form .form-row .filer-dropzone .dz-preview .dz-error-message{top:65px;left:0;width:100%}form .form-row .filer-dropzone .dz-preview .dz-success-mark,form .form-row .filer-dropzone .dz-preview .dz-error-mark{top:5px;right:0;left:auto;margin-top:0}form .form-row .filer-dropzone .dz-preview .dz-success-mark:before,form .form-row .filer-dropzone .dz-preview .dz-error-mark:before{color:var(--dca-gray, var(--body-quiet-color, #666))}form .form-row .filer-dropzone .dz-preview .dz-success-mark svg,form .form-row .filer-dropzone .dz-preview .dz-error-mark svg{display:none}form .form-row .filer-dropzone .dz-preview .dz-success-mark{width:16px;height:16px;background-image:url("data:image/svg+xml,%3Csvg width='13' height='13' viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%2370bf2b' d='M1412 734q0-28-18-46l-91-90q-19-19-45-19t-45 19l-408 407-226-226q-19-19-45-19t-45 19l-91 90q-18 18-18 46 0 27 18 45l362 362q19 19 45 19 27 0 46-19l543-543q18-18 18-45zm252 162q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z'/%3E%3C/svg%3E%0A");background-size:contain}form .form-row .filer-dropzone .dz-preview .dz-error-mark{background-image:url("data:image/svg+xml,%3Csvg width='13' height='13' viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23dd4646' d='M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z'/%3E%3C/svg%3E%0A");width:16px;height:16px;background-size:contain}form .form-row .filer-dropzone .dz-preview.dz-image-preview,form .form-row .filer-dropzone .dz-preview.dz-file-preview{background-color:rgba(0,0,0,0)}form .form-row .filer-dropzone .dz-preview.dz-image-preview .dz-image,form .form-row .filer-dropzone .dz-preview.dz-file-preview .dz-image{overflow:hidden;width:36px;height:36px;border:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd));border-radius:0}form .form-row .filer-dropzone .dz-preview.dz-image-preview .dz-image img,form .form-row .filer-dropzone .dz-preview.dz-file-preview .dz-image img{width:100%;height:auto}form .form-row .filer-dropzone .dz-preview .dz-progress{top:18px;left:0;width:calc(100% - 40px);height:10px;margin-left:40px}form .form-row .filer-dropzone .dz-message{float:right;color:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2));width:100%;margin:15px 0 0}form .form-row .filer-dropzone .icon{position:relative;top:3px;color:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2));font-size:24px;margin-right:10px}form .form-row .filer-dropzone .filerFile .related-lookup{background-image:none !important;margin-bottom:0;border-radius:var(--button-radius, 3px) !important;color:var(--default-button-fg, var(--button-fg, #fff)) !important;background-color:var(--primary) !important;border:1px solid var(--dca-black, var(--body-fg, #000)) !important;background-clip:padding-box;-webkit-appearance:none}form .form-row .filer-dropzone .filerFile .related-lookup:focus,form .form-row .filer-dropzone .filerFile .related-lookup.focus,form .form-row .filer-dropzone .filerFile .related-lookup:hover{color:var(--default-button-fg, var(--button-fg, #fff)) !important;background-color:var(--primary) !important;border-color:var(--dca-black, var(--body-fg, #000)) !important;filter:invert(0.05) !important;text-decoration:none !important}form .form-row .filer-dropzone .filerFile .related-lookup:active,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-active{color:var(--default-button-fg, var(--button-fg, #fff)) !important;background-color:var(--primary) !important;border-color:var(--dca-black, var(--body-fg, #000)) !important;filter:brightness(var(--active-brightness)) opacity(1) !important;box-shadow:inset 0 3px 5px rgba(var(--dca-black, var(--body-fg, #000)), 0.125) !important}form .form-row .filer-dropzone .filerFile .related-lookup:active:hover,form .form-row .filer-dropzone .filerFile .related-lookup:active:focus,form .form-row .filer-dropzone .filerFile .related-lookup:active.focus,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-active:hover,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-active:focus,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-active.focus{color:var(--default-button-fg, var(--button-fg, #fff)) !important;background-color:var(--primary) !important;border-color:var(--dca-black, var(--body-fg, #000)) !important;filter:brightness(calc(var(--focus-brightness) * var(--active-brightness))) opacity(1) !important}form .form-row .filer-dropzone .filerFile .related-lookup:active,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-active{background-image:none !important}form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled:hover,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled:focus,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled.focus,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled:active,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled.cms-btn-active,form .form-row .filer-dropzone .filerFile .related-lookup[disabled],form .form-row .filer-dropzone .filerFile .related-lookup[disabled]:hover,form .form-row .filer-dropzone .filerFile .related-lookup[disabled]:focus,form .form-row .filer-dropzone .filerFile .related-lookup[disabled].focus,form .form-row .filer-dropzone .filerFile .related-lookup[disabled]:active,form .form-row .filer-dropzone .filerFile .related-lookup[disabled].cms-btn-active{background-color:var(--primary) !important;border-color:var(--dca-black, var(--body-fg, #000)) !important;color:var(--default-button-fg, var(--button-fg, #fff)) true;filter:brightness(0.6) opacity(1);cursor:not-allowed;box-shadow:none !important}form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled:before,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled:hover:before,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled:focus:before,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled.focus:before,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled:active:before,form .form-row .filer-dropzone .filerFile .related-lookup.cms-btn-disabled.cms-btn-active:before,form .form-row .filer-dropzone .filerFile .related-lookup[disabled]:before,form .form-row .filer-dropzone .filerFile .related-lookup[disabled]:hover:before,form .form-row .filer-dropzone .filerFile .related-lookup[disabled]:focus:before,form .form-row .filer-dropzone .filerFile .related-lookup[disabled].focus:before,form .form-row .filer-dropzone .filerFile .related-lookup[disabled]:active:before,form .form-row .filer-dropzone .filerFile .related-lookup[disabled].cms-btn-active:before{color:var(--default-button-fg, var(--button-fg, #fff)) true;filter:brightness(0.6) opacity(1)}form .form-row .filer-dropzone .filerFile .related-lookup{float:left !important;overflow:hidden;line-height:14px;width:auto !important;height:auto !important;padding:10px 20px !important;margin-top:24px;margin-left:10px;text-align:center !important;cursor:pointer}form .form-row .filer-dropzone .filerFile .related-lookup .cms-icon{color:var(--dca-white, var(--body-bg, #fff));font-size:17px;margin:0 10px 0 0;vertical-align:middle}form .form-row .filer-dropzone .filerFile .related-lookup:before{display:none}form .form-row .filer-dropzone .filerFile .related-lookup .choose-file,form .form-row .filer-dropzone .filerFile .related-lookup .replace-file,form .form-row .filer-dropzone .filerFile .related-lookup .edit-file{color:var(--dca-white, var(--body-bg, #fff));margin:0}form .form-row .filer-dropzone .filerFile .related-lookup .replace-file{display:none}form .form-row .filer-dropzone .filerFile .related-lookup.edit{display:none}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change{background-image:none !important;margin-bottom:0;border-radius:var(--button-radius, 3px) !important;color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border:1px solid var(--dca-gray-lighter, transparent) !important;background-clip:padding-box;-webkit-appearance:none}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change:focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change:hover{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)) !important;border-color:var(--dca-gray-lighter, transparent) !important;text-decoration:none !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change:active,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-active{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;filter:brightness(var(--active-brightness)) opacity(1) !important;box-shadow:inset 0 3px 5px rgba(var(--dca-black, var(--body-fg, #000)), 0.125) !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change:active:hover,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change:active:focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change:active.focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-active:hover,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-active:focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-active.focus{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;filter:brightness(calc(var(--focus-brightness) * var(--active-brightness))) opacity(1) !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change:active,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-active{background-image:none !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled:hover,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled:focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled.focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled:active,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled.cms-btn-active,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled],form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled]:hover,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled]:focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled].focus,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled]:active,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled].cms-btn-active{background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;color:var(--dca-gray-light, var(--button-fg, #999)) true;filter:brightness(0.6) opacity(1);cursor:not-allowed;box-shadow:none !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled:hover:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled:focus:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled.focus:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled:active:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.cms-btn-disabled.cms-btn-active:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled]:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled]:hover:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled]:focus:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled].focus:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled]:active:before,form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change[disabled].cms-btn-active:before{color:var(--dca-gray-light, var(--button-fg, #999)) true;filter:brightness(0.6) opacity(1)}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change{float:right !important;padding:5px 0 !important;width:36px !important;height:36px !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change:focus{background-color:var(--dca-white, var(--body-bg, #fff)) !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change span{text-align:center;line-height:24px}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change .cms-icon{color:var(--dca-gray-light, var(--button-fg, #999));margin-right:0 !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change .choose-file{display:none}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change .replace-file{display:block}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.lookup{display:block !important}form .form-row .filer-dropzone .filerFile .related-lookup.related-lookup-change.edit{display:block}form .form-row .filer-dropzone .filerClearer{width:36px !important;height:36px !important;color:red}form .form-row .filer-dropzone .filerFile{position:absolute;top:9px;left:20px;width:calc(100% - 40px)}form .form-row .filer-dropzone .filerFile img[src*=nofile]{background-color:var(--dca-white, var(--body-bg, #fff))}form .form-row .filer-dropzone .filerFile span:not(:empty):not(.choose-file):not(.replace-file):not(.edit-file){overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:calc(100% - 260px);height:80px;line-height:80px}form .form-row .filer-dropzone .filerFile img{width:80px;height:80px;margin-right:10px;border:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd));border-radius:0;vertical-align:top}form .form-row .filer-dropzone .filerFile img[src*=nofile]{box-sizing:border-box;margin-right:0;border:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd));border-radius:0}form .form-row .filer-dropzone .filerFile a{box-sizing:border-box;padding-top:10px !important}form .form-row .filer-dropzone .filerFile span{display:inline-block;color:var(--dca-gray, var(--body-quiet-color, #666));font-weight:normal;margin-bottom:6px;text-align:left}form .form-row .filer-dropzone .filerFile span:empty+.related-lookup{float:none !important;margin-left:0 !important}form .form-row .filer-dropzone .filerFile a.filerClearer{background-image:none !important;margin-bottom:0;border-radius:var(--button-radius, 3px) !important;color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border:1px solid var(--dca-gray-lighter, transparent) !important;background-clip:padding-box;-webkit-appearance:none}form .form-row .filer-dropzone .filerFile a.filerClearer:focus,form .form-row .filer-dropzone .filerFile a.filerClearer.focus,form .form-row .filer-dropzone .filerFile a.filerClearer:hover{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)) !important;border-color:var(--dca-gray-lighter, transparent) !important;text-decoration:none !important}form .form-row .filer-dropzone .filerFile a.filerClearer:active,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-active{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;filter:brightness(var(--active-brightness)) opacity(1) !important;box-shadow:inset 0 3px 5px rgba(var(--dca-black, var(--body-fg, #000)), 0.125) !important}form .form-row .filer-dropzone .filerFile a.filerClearer:active:hover,form .form-row .filer-dropzone .filerFile a.filerClearer:active:focus,form .form-row .filer-dropzone .filerFile a.filerClearer:active.focus,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-active:hover,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-active:focus,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-active.focus{color:var(--dca-gray-light, var(--button-fg, #999)) !important;background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;filter:brightness(calc(var(--focus-brightness) * var(--active-brightness))) opacity(1) !important}form .form-row .filer-dropzone .filerFile a.filerClearer:active,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-active{background-image:none !important}form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled:hover,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled:focus,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled.focus,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled:active,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled.cms-btn-active,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled],form .form-row .filer-dropzone .filerFile a.filerClearer[disabled]:hover,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled]:focus,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled].focus,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled]:active,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled].cms-btn-active{background-color:var(--dca-white, var(--button-bg, #fff)) !important;border-color:var(--dca-gray-lighter, transparent) !important;color:var(--dca-gray-light, var(--button-fg, #999)) true;filter:brightness(0.6) opacity(1);cursor:not-allowed;box-shadow:none !important}form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled:before,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled:hover:before,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled:focus:before,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled.focus:before,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled:active:before,form .form-row .filer-dropzone .filerFile a.filerClearer.cms-btn-disabled.cms-btn-active:before,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled]:before,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled]:hover:before,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled]:focus:before,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled].focus:before,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled]:active:before,form .form-row .filer-dropzone .filerFile a.filerClearer[disabled].cms-btn-active:before{color:var(--dca-gray-light, var(--button-fg, #999)) true;filter:brightness(0.6) opacity(1)}form .form-row .filer-dropzone .filerFile a.filerClearer{float:right;padding:5px 0 !important;margin:24px 0 0 10px;width:36px;height:36px;text-align:center;cursor:pointer}form .form-row .filer-dropzone .filerFile a.filerClearer span:before{color:red !important}form .form-row .filer-dropzone .filerFile a.filerClearer span{text-align:center;line-height:24px}form .form-row .filer-dropzone.filer-dropzone-mobile .filerFile{text-align:center}form .form-row .filer-dropzone.filer-dropzone-mobile .dz-message{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-top:75px}form .form-row .filer-dropzone.filer-dropzone-mobile.js-object-attached .filerFile{text-align:center}@media screen and (max-width: 810px){form .form-row .filer-dropzone.filer-dropzone-mobile.js-object-attached .filerFile.js-file-selector .description_text{text-overflow:ellipsis;width:calc(100% - 250px);overflow:hidden}}form .form-row .filer-dropzone.filer-dropzone-mobile.js-object-attached .filerFile.js-file-selector>span:not(.choose-file):not(.replace-file):not(.edit-file),form .form-row .filer-dropzone.filer-dropzone-mobile.js-object-attached .filerFile.js-file-selector .dz-name{width:calc(100% - 250px)}form .form-row .filer-dropzone.filer-dropzone-folder .filerFile{top:8px}form .form-row .filer-dropzone.filer-dropzone-folder .filerFile #id_folder_description_txt{float:left}@media(max-width: 767px){form .form-row .filer-dropzone{flex-grow:1}}.filer-dropzone{min-height:100px !important}.filer-dropzone .dz-upload{height:5px;background-color:var(--dca-primary, var(--primary, #0bf))}.filer-dropzone .dz-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:calc(100% - 145px)}.filer-dropzone .dz-thumbnail{display:inline-block;overflow:hidden;vertical-align:top;width:80px;height:80px;margin-right:10px;border:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd));border-radius:3px;background:var(--dca-white, var(--body-bg, #fff)) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='%232980b9' d='M5 2c-1.105 0-2 .9-2 2v18c0 1.1.895 2 2 2h14c1.105 0 2-.9 2-2V8l-6-6z'/%3E%3Cpath fill='%233498db' d='M5 1c-1.105 0-2 .9-2 2v18c0 1.1.895 2 2 2h14c1.105 0 2-.9 2-2V7l-6-6z'/%3E%3Cpath fill='%232980b9' d='m21 7-6-6v4c0 1.1.895 2 2 2z'/%3E%3C/svg%3E");background-size:contain}.filer-dropzone .dz-thumbnail img{background:var(--dca-white, var(--body-bg, #fff))}.filer-dropzone .dz-thumbnail img[src=""],.filer-dropzone .dz-thumbnail img:not([src]){width:104%;height:104%;margin:-2%}.filer-dropzone-info-message{position:fixed;bottom:35px;left:50%;z-index:2;text-align:center;width:270px;max-height:300px;overflow-y:auto;margin:-50px 0 0 -150px;padding:15px 15px 0;border-radius:var(--dca-btn-radius, 3px);background:var(--dca-white, var(--body-bg, #fff));box-shadow:0 0 5px 0 rgba(0,0,0,.2)}.filer-dropzone-info-message .icon{font-size:35px;color:var(--dca-primary, var(--primary, #0bf))}.filer-dropzone-info-message .text{margin:5px 0 10px}.filer-dropzone-upload-info{margin-top:10px}.filer-dropzone-upload-info .filer-dropzone-file-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.filer-dropzone-upload-info:empty{margin-top:0}.filer-dropzone-progress{height:5px;margin-top:5px;background-color:var(--dca-primary, var(--primary, #0bf))}.filer-dropzone-upload-welcome .folder{color:var(--dca-primary, var(--primary, #0bf));padding:10px 0 0;margin:0 -15px;border-top:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}.filer-dropzone-upload-welcome .folder img,.filer-dropzone-upload-welcome .folder span{vertical-align:middle}.filer-dropzone-upload-welcome .folder img{margin-right:5px}.filer-dropzone-upload-welcome .folder .folder-inner{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 10px}.filer-dropzone-cancel{padding-top:10px;border-top:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd));margin:15px -15px 10px}.filer-dropzone-cancel a{font-size:12px;color:var(--dca-gray, var(--body-quiet-color, #666)) !important}.filer-dropzone-upload-success,.filer-dropzone-upload-canceled{margin:0 -15px 10px}.filer-dropzone-upload-count{padding-bottom:10px;margin:10px -15px;border-bottom:solid 1px var(--dca-gray-lighter, var(--border-color, #ddd))}.filer-tooltip-wrapper{position:relative}.filer-tooltip{position:absolute;left:-30px;right:-30px;color:var(--dca-gray, var(--body-quiet-color, #666));text-align:center;font-size:12px !important;line-height:15px !important;white-space:normal;margin-top:5px;padding:10px;background-color:var(--dca-white, var(--body-bg, #fff));box-shadow:0 0 10px rgba(0,0,0,.25);border-radius:5px;z-index:10;cursor:default}.filer-tooltip:before{position:absolute;top:-3px;left:50%;z-index:-1;content:"";width:9px;height:9px;margin-left:-5px;transform:rotate(45deg);background-color:var(--dca-white, var(--body-bg, #fff))}.disabled-btn-tooltip{display:none;outline:none}@keyframes passing-through{0%{opacity:0;transform:translateY(40px)}30%,70%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-40px)}}@keyframes slide-in{0%{opacity:0;transform:translateY(40px)}30%{opacity:1;transform:translateY(0)}}@keyframes pulse{0%{transform:scale(1)}10%{transform:scale(1.1)}20%{transform:scale(1)}}.filer-dropzone,.filer-dropzone *{box-sizing:border-box}.filer-dropzone{min-height:150px;padding:20px 20px;border:2px solid rgba(0,0,0,.3);background:#fff}.filer-dropzone.dz-clickable{cursor:pointer}.filer-dropzone.dz-clickable *{cursor:default}.filer-dropzone.dz-clickable .dz-message,.filer-dropzone.dz-clickable .dz-message *{cursor:pointer}.filer-dropzone.dz-drag-hover{border-style:solid}.filer-dropzone.dz-drag-hover .dz-message{opacity:.5}.filer-dropzone .dz-message{text-align:center;margin:2em 0}.filer-dropzone .dz-preview{display:inline-block;position:relative;vertical-align:top;min-height:100px;margin:16px}.filer-dropzone .dz-preview:hover{z-index:1000}.filer-dropzone .dz-preview:hover .dz-details{opacity:1}.filer-dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:var(--dca-gray-light, var(--body-quiet-color, #999));background:linear-gradient(to bottom, var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)), var(--dca-gray-lighter, var(--border-color, #ddd)))}.filer-dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.filer-dropzone .dz-preview.dz-image-preview{background:#fff}.filer-dropzone .dz-preview.dz-image-preview .dz-details{transition:opacity .2s linear}.filer-dropzone .dz-preview .dz-remove{display:block;font-size:14px;text-align:center;border:none;cursor:pointer}.filer-dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.filer-dropzone .dz-preview:hover .dz-details{opacity:1}.filer-dropzone .dz-preview .dz-details{position:absolute;top:0;left:0;z-index:20;color:rgba(0,0,0,.9);font-size:13px;line-height:150%;text-align:center;min-width:100%;max-width:100%;padding:2em 1em;opacity:0}.filer-dropzone .dz-preview .dz-details .dz-size{font-size:16px;margin-bottom:1em}.filer-dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.filer-dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid rgba(200,200,200,.8);background-color:hsla(0,0%,100%,.8)}.filer-dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.filer-dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid rgba(0,0,0,0)}.filer-dropzone .dz-preview .dz-details .dz-filename span,.filer-dropzone .dz-preview .dz-details .dz-size span{padding:0 .4em;border-radius:3px;background-color:hsla(0,0%,100%,.4)}.filer-dropzone .dz-preview:hover .dz-image img{transform:scale(1.05, 1.05);filter:blur(8px)}.filer-dropzone .dz-preview .dz-image{display:block;position:relative;overflow:hidden;z-index:10;width:120px;height:120px;border-radius:20px}.filer-dropzone .dz-preview .dz-image img{display:block}.filer-dropzone .dz-preview.dz-success .dz-success-mark{animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1)}.filer-dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)}.filer-dropzone .dz-preview .dz-success-mark,.filer-dropzone .dz-preview .dz-error-mark{display:block;position:absolute;top:50%;left:50%;z-index:500;margin-top:-27px;margin-left:-27px;pointer-events:none;opacity:0}.filer-dropzone .dz-preview .dz-success-mark svg,.filer-dropzone .dz-preview .dz-error-mark svg{display:block;width:54px;height:54px}.filer-dropzone .dz-preview.dz-processing .dz-progress{opacity:1;transition:all .2s linear}.filer-dropzone .dz-preview.dz-complete .dz-progress{opacity:0;transition:opacity .4s ease-in}.filer-dropzone .dz-preview:not(.dz-processing) .dz-progress{animation:pulse 6s ease infinite}.filer-dropzone .dz-preview .dz-progress{position:absolute;top:50%;left:50%;overflow:hidden;z-index:1000;width:80px;height:16px;margin-top:-8px;margin-left:-40px;border-radius:8px;pointer-events:none;opacity:1;background:hsla(0,0%,100%,.9)}.filer-dropzone .dz-preview .dz-progress .dz-upload{position:absolute;top:0;bottom:0;left:0;width:0;background:var(--dca-gray-darkest, var(--body-fg, #333));background:linear-gradient(to bottom, var(--dca-gray, var(--body-quiet-color, #666)), var(--dca-gray-darkest, var(--body-fg, #333)));transition:width 300ms ease-in-out}.filer-dropzone .dz-preview.dz-error .dz-error-message{display:block}.filer-dropzone .dz-preview.dz-error:hover .dz-error-message{pointer-events:auto;opacity:1}.filer-dropzone .dz-preview .dz-error-message{display:block;display:none;position:absolute;top:130px;left:-10px;z-index:1000;color:var(--dca-white, var(--body-bg, #fff));font-size:13px;width:140px;padding:.5em 1.2em;border-radius:8px;pointer-events:none;opacity:0;background:#be2626;background:linear-gradient(to bottom, #be2626, #a92222);transition:opacity .3s ease}.filer-dropzone .dz-preview .dz-error-message:after{content:"";position:absolute;top:-6px;left:64px;width:0;height:0;border-right:6px solid rgba(0,0,0,0);border-bottom:6px solid #be2626;border-left:6px solid rgba(0,0,0,0)}
\ No newline at end of file
diff --git a/filer/static/filer/css/admin_filer.fa.icons.css b/filer/static/filer/css/admin_filer.fa.icons.css
new file mode 100644
index 000000000..e99c3e677
--- /dev/null
+++ b/filer/static/filer/css/admin_filer.fa.icons.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:"FontAwesome";src:url("../fonts/fontawesome-webfont.eot?v=4.4.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.4.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.4.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.4.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}
\ No newline at end of file
diff --git a/filer/static/filer/css/admin_folderpermissions.css b/filer/static/filer/css/admin_folderpermissions.css
new file mode 100644
index 000000000..7741fdc6f
--- /dev/null
+++ b/filer/static/filer/css/admin_folderpermissions.css
@@ -0,0 +1,6 @@
+#id_folder {
+ width: calc(100% - 25px);
+}
+.field-folder .select2 {
+ min-width: 240px;
+}
diff --git a/filer/static/filer/css/maps/admin_filer.cms.icons.css.map b/filer/static/filer/css/maps/admin_filer.cms.icons.css.map
new file mode 100644
index 000000000..ed4f8531f
--- /dev/null
+++ b/filer/static/filer/css/maps/admin_filer.cms.icons.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["components/_iconography.scss"],"names":[],"mappings":"AAIA,WACI,mCAAA,CACA,qDAAA,CACA,0WAAA,CAKA,kBAAA,CACA,iBAAA,CAGJ,YACI,oBAAA,CACA,iCAAA,CACA,iBAAA,CACA,mBAAA,CACA,aAAA,CACA,yBAAA,CACA,kCAAA,CACA,iCAAA,CAqDA,8BACI,eAAA,CADJ,8BACI,eAAA,CADJ,iCACI,eAAA,CADJ,4BACI,eAAA,CADJ,0BACI,eAAA,CADJ,wBACI,eAAA,CADJ,kCACI,eAAA,CADJ,2BACI,eAAA,CADJ,oCACI,eAAA,CADJ,0BACI,eAAA,CADJ,4BACI,eAAA,CADJ,2BACI,eAAA,CADJ,0BACI,eAAA","file":"../admin_filer.cms.icons.css","sourcesContent":["//######################################################################################################################\n// #ICONOGRAPHY#\n\n// default font file generated by gulp\n@font-face {\n font-family: \"django-filer-iconfont\";\n src: url(\"../fonts/django-filer-iconfont.eot?v=3.2.0\");\n src: url(\"../fonts/django-filer-iconfont.eot?v=3.2.0#iefix\") format(\"eot\"),\n url(\"../fonts/django-filer-iconfont.woff2?v=3.2.0\") format(\"woff2\"),\n url(\"../fonts/django-filer-iconfont.woff?v=3.2.0\") format(\"woff\"),\n url(\"../fonts/django-filer-iconfont.ttf?v=3.2.0\") format(\"truetype\"),\n url(\"../fonts/django-filer-iconfont.svg?v=3.2.0#django-filer-iconfont\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n%icon {\n display: inline-block;\n font-family: django-filer-iconfont;\n font-size: inherit;\n text-rendering: auto;\n line-height: 1;\n transform: translate(0, 0);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n@function icon-char($filename) {\n $char: \"\";\n\n @if $filename == arrow-down {\n $char: \"E001\";\n }\n @if $filename == caret-down {\n $char: \"E002\";\n }\n @if $filename == chevron-right {\n $char: \"E003\";\n }\n @if $filename == download {\n $char: \"E004\";\n }\n @if $filename == expand {\n $char: \"E005\";\n }\n @if $filename == link {\n $char: \"E006\";\n }\n @if $filename == move-to-folder {\n $char: \"E007\";\n }\n @if $filename == picture {\n $char: \"E008\";\n }\n @if $filename == remove-selection {\n $char: \"E009\";\n }\n @if $filename == select {\n $char: \"E00A\";\n }\n @if $filename == th-large {\n $char: \"E00B\";\n }\n @if $filename == th-list {\n $char: \"E00C\";\n }\n @if $filename == upload {\n $char: \"E00D\";\n }\n\n @return $char;\n}\n\n.filer-icon {\n @extend %icon;\n}\n@mixin icon($filename, $insert: before) {\n &:#{$insert} {\n content: #{\"\\\"\\\\\"}#{icon-char($filename) + \"\\\"\"};\n }\n}\n\n// #####################################################################################################################\n// #ICONS:start#\n// use unicode characters for accessibility reasons and use aria-hidden=\"true\" for decorative icons\n// DOCS: http://filamentgroup.com/lab/bulletproof_icon_fonts.html\n\n.filer-icon-arrow-down {\n @include icon(arrow-down);\n}\n\n.filer-icon-caret-down {\n @include icon(caret-down);\n}\n\n.filer-icon-chevron-right {\n @include icon(chevron-right);\n}\n\n.filer-icon-download {\n @include icon(download);\n}\n\n.filer-icon-expand {\n @include icon(expand);\n}\n\n.filer-icon-link {\n @include icon(link);\n}\n\n.filer-icon-move-to-folder {\n @include icon(move-to-folder);\n}\n\n.filer-icon-picture {\n @include icon(picture);\n}\n\n.filer-icon-remove-selection {\n @include icon(remove-selection);\n}\n\n.filer-icon-select {\n @include icon(select);\n}\n\n.filer-icon-th-large {\n @include icon(th-large);\n}\n\n.filer-icon-th-list {\n @include icon(th-list);\n}\n\n.filer-icon-upload {\n @include icon(upload);\n}\n"]}
\ No newline at end of file
diff --git a/filer/static/filer/css/maps/admin_filer.css.map b/filer/static/filer/css/maps/admin_filer.css.map
new file mode 100644
index 000000000..39887dc9b
--- /dev/null
+++ b/filer/static/filer/css/maps/admin_filer.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["admin_filer.scss","components/_base.scss","settings/_custom.scss","components/_image-info.scss","mixins/_custom.scss","components/_action-list.scss","components/_filter-files.scss","components/_navigator.scss","components/_modal.scss","components/_drag-and-drop.scss","components/_tooltip.scss","libs/_dropzone.scss"],"names":[],"mappings":"AAAA;;EAAA,CCGA,UAEI,eAAA,CACA,sBAAA,CAGJ,WACI,eAAA,CAEJ,YACI,gBAAA,CAEJ,gBACI,UAAA,CACA,aAAA,CACA,UAAA,CAEJ,wBACI,qBAAA,CAEJ,uBACI,uBAAA,CAIJ,MACI,yBAAA,CACA,qEAAA,CAGJ,WACI,iBAAA,CAEA,cCLc,CDMd,qEAAA,CACA,iBAAA,CACA,kBAAA,CACA,gBAAA,CACA,mBAAA,CACA,qBAAA,CACA,iDCrCI,CDsCJ,gBAEI,cCfU,CDgBV,qEAAA,CAEJ,oBACI,WAAA,CAIR,yBACI,YAAA,CAEJ,uBACI,YAAA,CAKQ,iJAEI,wBAAA,CACA,yBAAA,CAEJ,yDACI,iBAAA,CACA,4BAAA,CAIZ,wBACI,cAAA,CACA,iCACI,SAAA,CACA,mCAAA,CAEJ,yGAEI,yBAAA,CAGR,8BACI,iBAAA,CACA,OAAA,CAGJ,gBACI,YAAA,CAEJ,2BACI,uDCxFA,CD4FR,cACI,UAAA,CAGJ,wBAEI,oBAAA,CACA,oBAAA,CAGJ,kBACI,YAAA,CACA,YAAA,CAEJ,aACI,WAAA,CACA,YAAA,CAGJ,iBACI,UAAA,CACA,gBAAA,CAGJ,kBACI,sBAAA,CACA,8BAAA,CACA,iBAAA,CAGJ,SACI,iBAAA,CACA,SAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CACA,eAAA,CACA,qBAAA,CACA,QAAA,CAGJ,QACI,uBAAA,CAGJ,gBACI,eAAA,CACA,yBAAA,CACA,iBAAA,CACA,uCAAA,CACA,uDC9II,CDiJR,8FAGI,cAAA,CACA,aAAA,CACA,YAAA,CAGJ,yBACI,uBAAA,CE7JJ,YACI,iBAAA,CACA,WAAA,CACA,qBAAA,CACA,SAAA,CACA,YAAA,CACA,QAAA,CACA,iBAAA,CACA,iDDLI,CCMJ,mCAAA,CACA,qDAEI,QAAA,CACA,SAAA,CACA,iFACI,aAAA,CACA,cAAA,CAEJ,2DACI,oBAAA,CAEJ,yDACI,cAAA,CAGR,8BAEI,eAAA,CACA,UAAA,CACA,UAAA,CACA,kBAAA,CACA,YAAA,CACA,eAAA,CC9BJ,yEAEI,WAAA,CACA,aAAA,CAEJ,oCACI,UAAA,CD0BA,0DACI,eAAA,CACA,iBAAA,CACA,8BAAA,CACA,iEACI,YAAA,CAGR,kDACI,UAAA,CAEJ,mDACI,UAAA,CACA,gBAAA,CAEJ,yFAEI,YAAA,CACA,mBAAA,CACA,qHACI,eAAA,CACA,kBAAA,CACA,SAAA,CAEJ,+FACI,UAAA,CACA,0DD3CE,CC4CF,cAAA,CAEA,2BAAA,CACA,kBAAA,CAEA,YAAA,CAEJ,+FACI,oDDvDE,CCwDF,cAAA,CAEA,2BAAA,CACA,iBAAA,CAEA,iBAAA,CAEJ,qGACI,cAAA,CACA,iBAAA,CACA,mHACI,cAAA,CAGR,+FACI,oDDvEE,CCwEF,yBAAA,CACA,6BAAA,CACA,wBAAA,CACA,mBAAA,CAEJ,6FACI,SAAA,CAGR,gDACI,eAAA,CACA,oDDnFM,CCoFN,kBAAA,CACA,sBAAA,CACA,eAAA,CACA,sDACI,UAAA,CACA,gBAAA,CAGR,uDACI,eAAA,CACA,eAAA,CACA,SAAA,CACA,2DACI,kBAAA,CAIJ,kDACI,cAAA,CACA,6DACI,UAAA,CAKhB,qCA3HJ,YA4HQ,UAAA,CACA,UAAA,CAEI,qGAEI,UAAA,CACA,aAAA,CAAA,CAMhB,kBACI,iBAAA,CACA,SAAA,CACA,UAAA,CACA,cAAA,CACA,cAAA,CAGJ,kBACI,gBAAA,CACA,0EAAA,CACA,oBACI,eAAA,CAIR,yBACI,iBAAA,CACA,aAAA,CACA,cAAA,CACA,wCACI,oBAAA,CACA,iBAAA,CACA,kBAAA,CACA,uEAAA,CACA,8HAAA,CACA,4CACI,aAAA,CAGR,8CACI,iBAAA,CACA,KAAA,CACA,OAAA,CACA,QAAA,CACA,MAAA,CACA,eAAA,CAEJ,+CACI,iBAAA,CACA,SAAA,CACA,UAAA,CACA,WAAA,CACA,oBAAA,CACA,YAAA,CACA,kBAAA,CACA,WAAA,CACA,6BAAA,CAEJ,8DACI,kBAAA,CACA,0EACI,YAAA,CAKZ,sBACI,iBAAA,CACA,iBAAA,CElMA,yBACI,aAAA,CACA,gBAAA,CAEJ,mCACI,oBAAA,CAEJ,oCACI,YAAA,CAEJ,oCACI,0EAAA,CACA,gDACI,YAAA,CAEJ,iDACI,oBAAA,CAIZ,cACI,uEAAA,CACA,yBACI,eAAA,CACA,2BACI,kBAAA,CAGR,gBACI,aAAA,CACA,cAAA,CACA,gBAAA,CACA,0EAAA,CAGA,gCACI,UAAA,CAEJ,+BACI,WAAA,CACA,cAAA,CAIZ,wBACI,oBAAA,CACA,QAAA,CACA,cAAA,CACA,qCAJJ,wBAKQ,UAAA,CACA,aAAA,CAAA,CAEJ,2BACI,oBAAA,CACA,gBAAA,CACA,qBAAA,CACA,cAAA,CACA,eAAA,CACA,qCACI,uCACI,cAAA,CAAA,CAGR,gCACI,qBAAA,CAEJ,6BACI,oDHtDM,CGyDd,oCACI,cAAA,CCvEJ,2CACI,eAAA,CAEJ,kDACI,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,qCALJ,kDAMQ,eAAA,CAAA,CAGR,0CACI,iBAAA,CAEJ,uEACI,eAAA,CAIR,wBAEI,kBAAA,CACA,qBAAA,CACA,iBAAA,CACA,WAAA,CACA,QAAA,CACA,SAAA,CACA,eAAA,CACA,eAAA,CACA,YAAA,CF7BA,6DAEI,WAAA,CACA,aAAA,CAEJ,8BACI,UAAA,CEwBJ,qCAXJ,wBAYQ,aAAA,CACA,UAAA,CACA,cAAA,CACA,eAAA,CACA,6CACI,UAAA,CAAA,CAGR,kDACI,iBAAA,CACA,KAAA,CACA,OAAA,CAEI,0OAII,oBAAA,CACA,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CAGR,uFACI,aAAA,CACA,uBAAA,CACA,0FACI,QAAA,CACA,SAAA,CACA,oBAAA,CAIZ,+CACI,iBAAA,CACA,UAAA,CACA,gBAAA,CACA,uBAAA,CACA,gBAAA,CACA,qCANJ,+CAOQ,UAAA,CAAA,CAEJ,8EACI,2BAAA,CACA,sBAAA,CAGR,6CACI,WAAA,CACA,iBAAA,CACA,kBAAA,CACA,WAAA,CACA,QAAA,CACA,sBAAA,CACA,mDACI,iBAAA,CACA,QAAA,CACA,yBAAA,CACA,kBAAA,CAGR,4CACI,mDJ9EU,CI+EV,yBAAA,CACA,gBAAA,CACA,kBAAA,CACA,qBAAA,CACA,0BAAA,CACA,WAAA,CAEA,QAAA,CACA,gCAAA,CACA,YAAA,CACA,uBAAA,CAAA,oBAAA,CAAA,eAAA,CACA,0BAAA,CAEA,uDACI,YAAA,CAGR,6CACI,uBAAA,CACA,4BAAA,CAGR,qBACI,eAAA,CCvHI,sCACI,uBAAA,CAEJ,mGAEI,iFAAA,CAGR,oBACI,kEAAA,CAGR,mBACI,cAAA,CACA,6DAAA,CACA,gEAAA,CACA,mBAAA,CACA,WAAA,CACA,YAAA,CAEJ,6BACI,yDAAA,CAEJ,2DAGI,UAAA,CACA,QAAA,CACA,kFAAA,CACA,mCAAA,CACA,yPAGI,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,sBAAA,CACA,wBAAA,CACA,0EAAA,CACA,kCAAA,CACA,0BAAA,CAGA,uIACI,8DAAA,CAGR,8KAEI,2BAAA,CACA,uFAAA,CACA,oYAEI,+DAAA,CAGR,6FACI,iBAAA,CACA,UAAA,CACA,4BAAA,CACA,yGAEI,qBAAA,CACA,QAAA,CAGR,yFACI,8CL9DQ,CKgEZ,qFACI,UAAA,CAEA,wBAAA,CACA,2BAAA,CAEJ,yFACI,iBAAA,CACA,UAAA,CACA,kBAAA,CACA,6BAAA,CACA,6FACI,yBAAA,CACA,QAAA,CAEJ,uHHNJ,gCAAA,CACA,eAAA,CACA,kDAAA,CACA,8DAAA,CACA,oEAAA,CACA,gEAAA,CACA,2BAAA,CACA,uBAAA,CGCQ,UAAA,CACA,8BAAA,CHDR,yYAGI,8DAAA,CAEI,iFAAA,CACA,4DAAA,CAMJ,+BAAA,CAEJ,0RAEI,8DAAA,CACA,oEAAA,CACA,4DAAA,CACA,iEAAA,CAEA,yFAAA,CAEA,s5BAGI,8DAAA,CACA,oEAAA,CACA,4DAAA,CACA,iGAAA,CAGR,0RAEI,gCAAA,CAIA,w3DAMI,oEAAA,CACA,4DAAA,CAII,wDAAA,CACA,iCAAA,CAEJ,kBAAA,CACA,0BAAA,CACA,giEAIQ,wDAAA,CACA,iCAAA,CGzDR,iIACI,cAAA,CACA,gBAAA,CACA,qBAAA,CAIZ,+EACI,oDLpFU,CKqFV,cLtEW,CKuEX,iBAAA,CACA,yBAAA,CACA,iFAAA,CACA,yFACI,cAAA,CACA,iBAAA,CACA,uGACI,kBAAA,CAKR,+FACI,iBAAA,CACA,2EAAA,CACA,gCAAA,CACA,mGAKI,yDAAA,CAJA,6GACI,8DAAA,CACA,kEAAA,CAMhB,uFACI,iBAAA,CACA,6HACI,uBAAA,CAEJ,6FACI,2EAAA,CACA,gCAAA,CAKJ,oLACI,kEAAA,CAGA,gPACI,2EAAA,CAKhB,mBACI,iBAAA,CACA,UAAA,CACA,eAAA,CACA,iBAAA,CACA,sELnIe,CKoIf,0EAAA,CACA,kDACI,aAAA,CACA,UAAA,CACA,qCAHJ,kDAIQ,aAAA,CAAA,CAGR,gDACI,aAAA,CACA,kBAAA,CACA,UAAA,CACA,0EACI,kBAAA,CACA,UAAA,CACA,WAAA,CACA,qBAAA,CACA,+EACI,gBAAA,CACA,WAAA,CACA,qBAAA,CAIZ,0CACI,kBAAA,CACA,qBAAA,CACA,qCAHJ,0CAIQ,eAAA,CACA,iBAAA,CAAA,CAGR,oCAEI,kBAAA,CACA,qBAAA,CACA,gBAAA,CACA,cAAA,CH5LJ,qFAEI,WAAA,CACA,aAAA,CAEJ,0CACI,UAAA,CGuLA,qCANJ,oCAOQ,cAAA,CACA,eAAA,CAAA,CAGR,+BACI,oBAAA,CACA,oDLxLU,CKyLV,cAAA,CACA,gBAAA,CACA,kBAAA,CACA,aAAA,CACA,oCACI,qBAAA,CAGR,sCACI,iBAAA,CACA,QAAA,CAEJ,oCACI,QAAA,CACA,cAAA,CAEJ,8BACI,oBAAA,CACA,iBAAA,CACA,kBAAA,CACA,SAAA,CACA,WAAA,CACA,YAAA,CACA,qCACI,UAAA,CACA,aAAA,CACA,iBAAA,CACA,SAAA,CACA,YAAA,CACA,eAAA,CACA,SAAA,CACA,mELtNM,CK2Nd,8dASI,oBAAA,CACA,eAAA,CACA,unBACI,kBAAA,CACA,aAAA,CACA,eAAA,CACA,8vBACI,cAAA,CAIZ,gDACI,eAAA,CAEJ,mEACI,kBAAA,CACA,4GACI,uBAAA,CAGR,6EACG,+BAAA,CAEH,uCACI,kBAAA,CAEJ,8CACI,UAAA,CACA,eAAA,CACA,YAAA,CAEJ,6CACI,cAAA,CAEJ,mDACI,qBAAA,CAEJ,iEACI,UAAA,CACA,uBAAA,CAIR,iBAEI,kBAAA,CH/RA,+CAEI,WAAA,CACA,aAAA,CAEJ,uBACI,UAAA,CG0RJ,qCAHJ,iBAIQ,cAAA,CAAA,CAEJ,kCACI,oBAAA,CACA,eAAA,CACA,gBAAA,CACA,8EACI,qEAAA,CACA,kBAAA,CAEJ,qCARJ,kCAUQ,UAAA,CACA,aAAA,CH9SR,iFAEI,WAAA,CACA,aAAA,CAEJ,wCACI,UAAA,CAAA,CG2SI,oDACI,+DAAA,CACA,cAAA,CAEJ,0EACI,oBAAA,CAGR,oEACI,wEAAA,CACA,aAAA,CAGR,0BACI,YAAA,CACA,WAAA,CACA,qCAHJ,0BAKQ,UAAA,CACA,kBAAA,CHpUR,iEAEI,WAAA,CACA,aAAA,CAEJ,gCACI,UAAA,CAAA,CGgUA,8IAII,cLhTM,CKiTN,gBAAA,CACA,uBAAA,CAEJ,yEAEI,0DLjUM,CKmUV,qEAEI,gBAAA,CACA,iBAAA,CACA,wEAAA,CAGR,mDACI,oBAAA,CACA,gBAAA,CAIR,qCAEQ,0CACI,UAAA,CAEJ,oCACI,UAAA,CACA,sDACI,KAAA,CACA,QAAA,CAAA,CAMhB,0BACI,oBAAA,CACA,kBAAA,CACA,gBAAA,CACA,eAAA,CACA,gBAAA,CACA,qCANJ,0BAOQ,aAAA,CACA,UAAA,CACA,eAAA,CACA,YAAA,CACA,aAAA,CAAA,CAGR,kBACI,iBAAA,CACA,kGHhTA,gCAAA,CACA,eAAA,CACA,kDAAA,CACA,yDAAA,CACA,oEAAA,CACA,oEAAA,CACA,2BAAA,CACA,uBAAA,CG8SI,oBAAA,CACA,kBAAA,CACA,4BAAA,CH/SJ,8WAGI,yDAAA,CAKI,oEAAA,CACA,gEAAA,CACA,8BAAA,CAEJ,+BAAA,CAEJ,4RAEI,yDAAA,CACA,oEAAA,CACA,gEAAA,CACA,iEAAA,CAEA,yFAAA,CAEA,o+BAGI,yDAAA,CACA,oEAAA,CACA,gEAAA,CACA,iGAAA,CAGR,4RAEI,gCAAA,CAIA,gmEAMI,oEAAA,CACA,gEAAA,CAII,mDAAA,CACA,iCAAA,CAEJ,kBAAA,CACA,0BAAA,CACA,g7EAIQ,mDAAA,CACA,iCAAA,CGsPhB,wBACI,iBAAA,CACA,gBAAA,CAEJ,6BACI,KAAA,CAEJ,0CACI,cAAA,CAIR,wBACI,oBAAA,CAEJ,uCACI,eAAA,CAGJ,WACI,iBAAA,CACA,eAAA,CACA,UAAA,CACA,gBACI,QAAA,CACA,SAAA,CACA,eAAA,CAIR,0BACI,oBAAA,CACA,iBAAA,CACA,kBAAA,CACA,wFACI,cAAA,CAEJ,8FAEI,YAAA,CACA,OAAA,CACA,SAAA,CACA,QAAA,CACA,qCLjXU,CKkXV,wGACI,aAAA,CACA,8CLhbI,CKibJ,kBAAA,CACA,kBAAA,CACA,4BAAA,CACA,qCANJ,wGAOQ,kBAAA,CAAA,CAGR,0GACI,aAAA,CACA,2BAAA,CACA,mBAAA,CACA,UAAA,CACA,uBAAA,CACA,yBAAA,CAEJ,0GACI,iBAAA,CACA,OAAA,CACA,kBAAA,CACA,gBAAA,CAEJ,4JACI,OAAA,CACA,eAAA,CACA,YAAA,CACA,QAAA,CACA,qCL/YM,CKgZN,0KACI,YAAA,CAEJ,gLACI,iBAAA,CACA,QAAA,CACA,UAAA,CACA,oDL5cE,CK6cF,cAAA,CACA,4LACI,8CLtdJ,CKydJ,gKACI,qEAAA,CACA,kBAAA,CACA,wBAAA,CACA,iBAAA,CAEJ,wKACI,+DAAA,CACA,kBAAA,CACA,oBAAA,CACA,uBAAA,CACA,oLACI,aAAA,CAIZ,8GACI,uDAAA,CACA,8DAAA,CAGR,oDACI,aAAA,CACA,uDACI,QAAA,CACA,SAAA,CACA,oBAAA,CAGR,qCACI,iBAAA,CAKA,8JAII,oDLzfM,CK0fN,cAAA,CACA,gBAAA,CACA,WAAA,CACA,cAAA,CAGR,oDACI,UAAA,CACA,UAAA,CACA,iBAAA,CAIR,qBACI,iBAAA,CACA,QAAA,CACA,YAAA,CACA,YAAA,CACA,UAAA,CACA,eAAA,CACA,cAAA,CACA,uBAAA,CACA,SAAA,CACA,eAAA,CACA,cAAA,CACA,eAAA,CACA,uDL/hBI,CKgiBJ,iBAAA,CACA,2BAAA,CACA,4BACI,iBAAA,CACA,QAAA,CACA,SAAA,CACA,UAAA,CACA,UAAA,CACA,UAAA,CACA,WAAA,CACA,gBAAA,CACA,uBAAA,CACA,uDL5iBA,CK8iBJ,iDACI,SAAA,CACA,UAAA,CAIR,uBAEI,kBAAA,CACA,qBAAA,CACA,cAAA,CACA,kBAAA,CACA,UAAA,CH3jBA,2DAEI,WAAA,CACA,aAAA,CAEJ,6BACI,UAAA,CGsjBJ,yBACI,8DAAA,CAEJ,6BACI,0DLjjBU,CKkjBV,gBAAA,CACA,WAAA,CACA,YAAA,CACA,oCACI,qBAAA,CAGR,0BACI,oBAAA,CAGR,2CACI,kBAAA,CACA,eAAA,CACA,cAAA,CACA,gBAAA,CACA,qBAAA,CACA,kBAAA,CAEJ,mCACI,aAAA,CACA,eAAA,CACA,kBAAA,CACA,gBAAA,CACA,UAAA,CACA,WAAA,CAEJ,yCACI,aAAA,CACA,iBAAA,CACA,eAAA,CACA,gBAAA,CACA,WAAA,CACA,UAAA,CACA,sBAAA,CAEJ,gDACI,iBAAA,CACA,UAAA,CACA,qBAAA,CACA,gBAAA,CACA,sDACI,aAAA,CAEJ,gFACI,qBAAA,CACA,eAAA,CACA,SAAA,CACA,YAAA,CACA,QAAA,CACA,qCLljBU,CKmjBV,mFACI,SAAA,CACA,qFACI,8CLlnBA,CKmnBA,gCAAA,CACA,6EAAA,CACA,2FACI,uDAAA,CACA,8DAAA,CAGR,gGACI,kBAAA,CAGR,oFACI,iBAAA,CACA,QAAA,CACA,kBAAA,CACA,iBAAA,CAKZ,6BACI,iBAAA,CACA,SAAA,CACA,eAAA,CACA,UAAA,CACA,WAAA,CACA,gBAAA,CACA,YAAA,CACA,mCACI,UAAA,CACA,iBAAA,CACA,QAAA,CACA,QAAA,CACA,UAAA,CACA,WAAA,CACA,eAAA,CACA,uBAAA,CACA,qCL5lBU,CKgmBlB,6CACI,aAAA,CACA,eAAA,CACA,kEACI,SAAA,CACA,WAAA,CACA,yEACI,UAAA,CACA,SAAA,CAGR,+CACI,oBAAA,CAIR,yBACI,kBAAA,CACA,qBAAA,CAGJ,uCACI,eAAA,CACA,uDACI,uBAAA,CAGA,0EACI,oBAAA,CACA,wBAAA,CACA,QAAA,CACA,SAAA,CACA,iBAAA,CAEJ,4FACI,WAAA,CACA,kBAAA,CACA,sBAAA,CACA,8CLlsBI,CKmsBJ,iHACE,eAAA,CACA,qBAAA,CAIV,uDAEI,oBAAA,CHhtBJ,2HAEI,WAAA,CACA,aAAA,CAEJ,6DACI,UAAA,CG4sBJ,uDACI,UAAA,CACA,oBAAA,CACA,YAAA,CACA,8CAAA,CACA,+CAAA,CACA,mEAAA,CACA,gBAAA,CACA,uDLztBA,CK0tBA,iBAAA,CACA,eAAA,CACA,gFACI,YAAA,CACA,8CAAA,CACA,+CAAA,CACA,mEAAA,CACA,gBAAA,CACA,uDLluBJ,CKmuBI,sFACI,wBAAA,CAGR,2EACI,iBAAA,CACA,OAAA,CACA,QAAA,CACA,iFACG,QAAA,CACA,kBAAA,CAGP,yIAEI,UAAA,CACA,SAAA,CACA,gBAAA,CACA,kBAAA,CACA,6IACI,aAAA,CACA,WAAA,CACA,UAAA,CAEJ,iJACI,UAAA,CACA,WAAA,CAGR,kEACI,wBAAA,CACA,iBAAA,CACA,qBAAA,CAGR,+DACI,wBAAA,CAGA,oEACI,wBAAA,CAGR,4DACI,UAAA,CACA,+CAAA,CACA,gDAAA,CACA,QAAA,CACA,SAAA,CACA,8BAAA,CACA,qFACI,UAAA,CACA,QAAA,CACA,iBAAA,CAEJ,4EACI,QAAA,CACA,WAAA,CACA,UAAA,CAEJ,uEACI,iBAAA,CACA,qBAAA,CAMR,yBACI,qBAAA,CAEJ,uBACI,cAAA,CC5yBA,sPAII,qBAAA,CACA,yBAAA,CACA,0BAAA,CACA,sSACI,uBAAA,CAEJ,8QACI,qBAAA,CAIJ,qIAEI,eAAA,CAIZ,oCAEI,6BAAA,CAEJ,0BACI,SAAA,CACA,mBAAA,CACA,kBAAA,CACA,eAAA,CACA,0EAAA,CAGA,0GAGI,WAAA,CAGR,uBACI,gBAAA,CAEJ,iDACI,OAAA,CAEJ,uCACI,mBAAA,CAEJ,iCACI,WAAA,CACA,qCAFJ,iCAGQ,UAAA,CAAA,CAIJ,2CACI,SAAA,CAEJ,iDACI,SAAA,CAIA,qCAFJ,4FAGQ,UAAA,CAAA,CC5DR,iSACI,YAAA,CAGR,sHAEI,YAAA,CAEJ,0EACI,UAAA,CAEJ,+BAEI,iBAAA,CACA,eAAA,CACA,mEAAA,CACA,wCPca,CObb,sEPRU,COSV,gCAAA,CLtBJ,2EAEI,WAAA,CACA,aAAA,CAEJ,qCACI,UAAA,CKiBA,4CACI,iBAAA,CACA,KAAA,CACA,OAAA,CACA,QAAA,CACA,MAAA,CAEJ,6CACI,yDP1BI,CO2BJ,sBAAA,CACA,oEAAA,CACA,0DACI,SAAA,CAEJ,yDACI,SAAA,CACA,wBAAA,CACA,kBAAA,CAEJ,wDACI,YAAA,CAEJ,wHACI,yDAAA,CAGR,sDACI,YAAA,CAEJ,2CACI,UAAA,CACA,eAAA,CACA,cAAA,CACA,eAAA,CACA,aAAA,CACA,mBAAA,CACA,0EAAA,CACA,oDACI,iBAAA,CACA,sEACI,YAAA,CAEJ,4EACI,aAAA,CAGR,uDACI,2BAAA,CACA,2BAAA,CACA,cAAA,CACA,gBAAA,CACA,SAAA,CACA,SAAA,CACA,8MAGI,UAAA,CACA,eAAA,CACA,6NACI,oDPtEN,COuEM,mBAAA,CACA,yCAAA,CAIZ,sDACI,gmBAAA,CACA,uBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,UAAA,CACA,UAAA,CACA,UAAA,CACA,WAAA,CAEJ,6DACI,QAAA,CACA,MAAA,CACA,UAAA,CAEJ,sHAEI,OAAA,CACA,OAAA,CACA,SAAA,CACA,YAAA,CACA,oIACI,oDPnGF,COqGF,8HACI,YAAA,CAGR,4DAEI,UAAA,CACA,WAAA,CACA,2eAAA,CACA,uBAAA,CAEJ,0DAEI,umBAAA,CACA,UAAA,CACA,WAAA,CACA,uBAAA,CAEJ,uHAEI,8BAAA,CACA,2IACI,eAAA,CACA,UAAA,CACA,WAAA,CACA,mEAAA,CACA,eAAA,CACA,mJACI,UAAA,CACA,WAAA,CAIZ,wDACI,QAAA,CACA,MAAA,CACA,uBAAA,CACA,WAAA,CACA,gBAAA,CAGR,2CACI,WAAA,CACA,2DP/IM,COgJN,UAAA,CACA,eAAA,CAEJ,qCACI,iBAAA,CACA,OAAA,CACA,2DPtJM,COuJN,cAAA,CACA,iBAAA,CAEJ,0DLzFJ,gCAAA,CACA,eAAA,CACA,kDAAA,CACA,yDAAA,CACA,oEAAA,CACA,oEAAA,CACA,2BAAA,CACA,uBAAA,CKoFQ,qBAAA,CACA,eAAA,CAEA,gBPjJO,COkJP,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,eAAA,CACA,gBAAA,CACA,4BAAA,CACA,cAAA,CL7FR,gMAGI,yDAAA,CAKI,oEAAA,CACA,gEAAA,CACA,8BAAA,CAEJ,+BAAA,CAEJ,0IAEI,yDAAA,CACA,oEAAA,CACA,gEAAA,CACA,iEAAA,CAEA,yFAAA,CAEA,kcAGI,yDAAA,CACA,oEAAA,CACA,gEAAA,CACA,iGAAA,CAGR,0IAEI,gCAAA,CAIA,06BAMI,oEAAA,CACA,gEAAA,CAII,mDAAA,CACA,iCAAA,CAEJ,kBAAA,CACA,0BAAA,CACA,8/BAIQ,mDAAA,CACA,iCAAA,CKmCR,oEACI,4CPpLR,COqLQ,cAAA,CACA,iBAAA,CACA,qBAAA,CAEJ,iEACI,YAAA,CAEJ,oNAGI,4CP/LR,COgMQ,QAAA,CAEJ,wEACI,YAAA,CAEJ,+DACI,YAAA,CAEJ,gFL3HR,gCAAA,CACA,eAAA,CACA,kDAAA,CACA,8DAAA,CACA,oEAAA,CACA,gEAAA,CACA,2BAAA,CACA,uBAAA,CKsHY,sBAAA,CACA,wBAAA,CACA,qBAAA,CACA,sBAAA,CLxHZ,kQAGI,8DAAA,CAEI,iFAAA,CACA,4DAAA,CAMJ,+BAAA,CAEJ,sLAEI,8DAAA,CACA,oEAAA,CACA,4DAAA,CACA,iEAAA,CAEA,yFAAA,CAEA,skBAGI,8DAAA,CACA,oEAAA,CACA,4DAAA,CACA,iGAAA,CAGR,sLAEI,gCAAA,CAIA,krCAMI,oEAAA,CACA,4DAAA,CAII,wDAAA,CACA,iCAAA,CAEJ,kBAAA,CACA,0BAAA,CACA,swCAIQ,wDAAA,CACA,iCAAA,CK8DJ,sFACI,kEAAA,CAEJ,qFACI,iBAAA,CACA,gBAAA,CAEJ,0FACI,mDPlKA,COmKA,yBAAA,CAEJ,6FACI,YAAA,CAEJ,8FACI,aAAA,CAEJ,uFACI,wBAAA,CAEJ,qFACI,aAAA,CAKZ,6CACI,qBAAA,CACA,sBAAA,CACA,SPpOG,COsOP,0CACI,iBAAA,CACA,OAAA,CAEA,SAAA,CACA,uBAAA,CACA,2DACI,uDPpPR,COuPI,gHACI,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,wBAAA,CACA,WAAA,CACA,gBAAA,CAGJ,8CACI,UAAA,CACA,WAAA,CACA,iBAAA,CACA,mEAAA,CACA,wCPpOK,COqOL,kBAAA,CACA,2DACI,qBAAA,CACA,cAAA,CACA,mEAAA,CACA,wCP1OC,CO8OT,4CACI,qBAAA,CACA,2BAAA,CAGJ,+CACI,oBAAA,CACA,oDP3QE,CO4QF,kBAAA,CACA,iBAAA,CACA,eAAA,CACA,qEACI,qBAAA,CACA,wBAAA,CAIR,yDLnNR,gCAAA,CACA,eAAA,CACA,kDAAA,CACA,8DAAA,CACA,oEAAA,CACA,gEAAA,CACA,2BAAA,CACA,uBAAA,CK8MY,WAAA,CACA,wBAAA,CACA,oBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,cAAA,CLnNZ,6LAGI,8DAAA,CAEI,iFAAA,CACA,4DAAA,CAMJ,+BAAA,CAEJ,wIAEI,8DAAA,CACA,oEAAA,CACA,4DAAA,CACA,iEAAA,CAEA,yFAAA,CAEA,4bAGI,8DAAA,CACA,oEAAA,CACA,4DAAA,CACA,iGAAA,CAGR,wIAEI,gCAAA,CAIA,85BAMI,oEAAA,CACA,4DAAA,CAII,wDAAA,CACA,iCAAA,CAEJ,kBAAA,CACA,0BAAA,CACA,k/BAIQ,wDAAA,CACA,iCAAA,CKyJJ,qEACI,oBAAA,CAEJ,8DACI,iBAAA,CACA,gBAAA,CAMR,gEACI,iBAAA,CAEJ,iEACI,eAAA,CACA,kBAAA,CACA,sBAAA,CAEA,eAAA,CAEJ,mFACI,iBAAA,CAEI,qCACI,sHACI,sBAAA,CACA,wBAAA,CACA,eAAA,CAAA,CAGR,2QACI,wBAAA,CAMhB,gEACI,OAAA,CACA,2FACI,UAAA,CAIR,yBAxUJ,+BAyUQ,WAAA,CAAA,CAMZ,gBACI,2BAAA,CACA,2BACI,UAAA,CACA,yDP7VQ,CO+VZ,yBACI,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,4BAAA,CAEJ,8BACI,oBAAA,CACA,eAAA,CACA,kBAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,mEAAA,CACA,iBAAA,CACA,kaAAA,CACA,uBAAA,CACA,kCACI,iDPrXJ,COsXI,uFAEI,UAAA,CACA,WAAA,CACA,UAAA,CAMhB,6BACI,cAAA,CACA,WAAA,CACA,QAAA,CACA,SAAA,CACA,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,eAAA,CACA,uBAAA,CACA,mBAAA,CACA,wCP1WiB,CO2WjB,iDP5YI,CO6YJ,mCP9Uc,CO+Ud,mCACI,cAAA,CACA,8CP5YQ,CO8YZ,mCACI,iBAAA,CAGR,4BACI,eAAA,CAEA,sDACI,eAAA,CACA,kBAAA,CACA,sBAAA,CAEJ,kCACI,YAAA,CAGR,yBACI,UAAA,CACA,cAAA,CACA,yDPjaY,COoahB,uCACI,8CPraY,COsaZ,gBAAA,CACA,cAAA,CACA,uEAAA,CACA,uFAEI,qBAAA,CAEJ,2CACI,gBAAA,CAEJ,qDACI,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,cAAA,CAIR,uBACI,gBAAA,CACA,uEAAA,CACA,sBAAA,CACA,yBACI,cPxaU,COyaV,+DAAA,CAGR,+DAEI,mBAAA,CAGJ,6BACI,mBAAA,CACA,iBAAA,CACA,0EAAA,CCndJ,uBACI,iBAAA,CAGJ,eACI,iBAAA,CACA,UAAA,CACA,WAAA,CACA,oDRSc,CQRd,iBAAA,CACA,yBAAA,CACA,2BAAA,CACA,kBAAA,CACA,cAAA,CACA,YAAA,CACA,uDRTI,CQUJ,mCAAA,CACA,iBAAA,CACA,UAAA,CACA,cAAA,CACA,sBACI,iBAAA,CACA,QAAA,CACA,QAAA,CACA,UAAA,CACA,UAAA,CACA,SAAA,CACA,UAAA,CACA,gBAAA,CACA,uBAAA,CACA,uDRxBA,CQ4BR,sBACI,YAAA,CACA,YAAA,CChCJ,2BACI,GACI,SAAA,CACA,0BAAA,CAEJ,QAEI,SAAA,CACA,uBAAA,CAEJ,KACI,SAAA,CACA,2BAAA,CAAA,CAGR,oBACI,GACI,SAAA,CACA,0BAAA,CAEJ,IACI,SAAA,CACA,uBAAA,CAAA,CAGR,iBACI,GACI,kBAAA,CAEJ,IACI,oBAAA,CAEJ,IACI,kBAAA,CAAA,CAGR,kCAEI,qBAAA,CAGJ,gBACI,gBAAA,CACA,iBAAA,CACA,+BAAA,CACA,eAAA,CAEJ,6BACI,cAAA,CAEJ,+BACI,cAAA,CAEJ,oFAEI,cAAA,CAEJ,8BACI,kBAAA,CAEJ,0CACI,UAAA,CAEJ,4BACI,iBAAA,CACA,YAAA,CAEJ,4BACI,oBAAA,CACA,iBAAA,CACA,kBAAA,CACA,gBAAA,CACA,WAAA,CAEJ,kCACI,YAAA,CAEJ,8CACI,SAAA,CAEJ,sDACI,kBAAA,CACA,+DTlEc,CSmEd,gJAAA,CAEJ,wDACI,SAAA,CAEJ,6CACI,eAAA,CAEJ,yDACI,6BAAA,CAEJ,uCACI,aAAA,CACA,cAAA,CACA,iBAAA,CACA,WAAA,CACA,cAAA,CAEJ,6CACI,yBAAA,CAEJ,8CACI,SAAA,CAEJ,wCACI,iBAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,oBAAA,CACA,cAAA,CACA,gBAAA,CACA,iBAAA,CACA,cAAA,CACA,cAAA,CACA,eAAA,CACA,SAAA,CAEJ,iDACI,cAAA,CACA,iBAAA,CAEJ,qDACI,kBAAA,CAEJ,gEACI,qCAAA,CACA,mCAAA,CAEJ,iEACI,eAAA,CACA,sBAAA,CAEJ,sEACI,8BAAA,CAEJ,gHAEI,cAAA,CACA,iBAAA,CACA,mCAAA,CAEJ,gDACI,2BAAA,CAEA,gBAAA,CAEJ,sCACI,aAAA,CACA,iBAAA,CACA,eAAA,CACA,UAAA,CACA,WAAA,CACA,YAAA,CACA,kBAAA,CAEJ,0CACI,aAAA,CAEJ,wDACI,4DAAA,CAEJ,oDACI,SAAA,CACA,qDAAA,CAEJ,wFAEI,aAAA,CACA,iBAAA,CACA,OAAA,CACA,QAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,mBAAA,CACA,SAAA,CAEJ,gGAEI,aAAA,CACA,UAAA,CACA,WAAA,CAEJ,uDACI,SAAA,CACA,yBAAA,CAEJ,qDACI,SAAA,CACA,8BAAA,CAEJ,6DACI,gCAAA,CAEJ,yCACI,iBAAA,CACA,OAAA,CACA,QAAA,CACA,eAAA,CACA,YAAA,CACA,UAAA,CACA,WAAA,CACA,eAAA,CACA,iBAAA,CACA,iBAAA,CACA,mBAAA,CACA,SAAA,CACA,6BAAA,CAEJ,oDACI,iBAAA,CACA,KAAA,CACA,QAAA,CACA,MAAA,CACA,OAAA,CACA,wDTzMc,CS0Md,oIAAA,CACA,kCAAA,CAEJ,uDACI,aAAA,CAEJ,6DACI,mBAAA,CACA,SAAA,CAEJ,8CACI,aAAA,CACA,YAAA,CACA,iBAAA,CACA,SAAA,CACA,UAAA,CACA,YAAA,CACA,4CT3OI,CS4OJ,cAAA,CACA,WAAA,CACA,kBAAA,CACA,iBAAA,CACA,mBAAA,CACA,SAAA,CACA,kBAAA,CACA,uDAAA,CACA,2BAAA,CAEJ,oDACI,UAAA,CACA,iBAAA,CACA,QAAA,CACA,SAAA,CACA,OAAA,CACA,QAAA,CACA,oCAAA,CACA,+BAAA,CACA,mCAAA","file":"../admin_filer.css","sourcesContent":["/*!\n * @copyright: https://github.com/divio/django-filer\n */\n\n//##############################################################################\n// IMPORT SETTINGS\n@import \"settings/all\";\n@import \"mixins/all\";\n\n//##############################################################################\n// IMPORT COMPONENTS\n@import \"components/base\";\n@import \"components/image-info\";\n@import \"components/action-list\";\n@import \"components/filter-files\";\n@import \"components/navigator\";\n@import \"components/modal\";\n@import \"components/drag-and-drop\";\n@import \"components/tooltip\";\n\n//##############################################################################\n// IMPORT LIBS\n@import \"libs/dropzone\";\n","//##############################################################################\n// BASE\n\nhtml,\nbody {\n min-width: 320px;\n height: 100% !important;\n}\n\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.clearfix:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.related-widget-wrapper {\n float: none !important;\n}\n.related-lookup.hidden {\n display: none !important;\n}\n\n// make sure that tiny styles like on size info has correct font size and color #666\n.tiny {\n font-size: $font-size-small !important;\n color: $gray-light !important;\n}\n\n.nav-pages {\n position: relative;\n // make sure that paginator has correct font size and color #666\n font-size: $font-size-small;\n color: $gray-light !important;\n padding-left: 10px;\n padding-right: 20px;\n padding-top: 15px;\n padding-bottom: 15px;\n box-sizing: border-box;\n background: $white;\n span {\n // make sure that paginator has correct font size and color #666\n font-size: $font-size-small;\n color: $gray-light !important;\n }\n .actions {\n float: right;\n }\n}\n\n#id_upload_button:before {\n display: none;\n}\n#content #content-main {\n margin-top: 0;\n}\n.filebrowser {\n &.cms-admin-sideframe {\n #container {\n .breadcrumbs + #content,\n .breadcrumbs + .messagelist + #content {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .breadcrumbs {\n left: 0 !important;\n padding-left: 20px !important;\n }\n }\n }\n #container {\n min-width: auto;\n #content {\n padding: 0;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);\n }\n .breadcrumbs + #content,\n .breadcrumbs + .messagelist + #content {\n margin-left: 3% !important;\n }\n }\n h1.folder_header {\n position: relative;\n top: 6px;\n }\n // required for django CMS <= 3.1 #673\n h2 {\n display: none;\n }\n #content-main {\n background-color: $white;\n }\n}\n\n.filer-widget {\n width: 100%;\n}\n\n.field-file,\n.field-sha1 {\n word-wrap: break-word;\n word-break: break-all;\n}\n\n.well.img-preview {\n display: none;\n margin-top: 0;\n}\n.img-wrapper {\n width: 180px;\n height: 180px;\n}\n\n.file-duplicates {\n clear: both;\n padding: 20px 0 0;\n}\n\nform .cancel-link {\n height: auto !important;\n line-height: inherit !important;\n padding: 10px 15px;\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n.hidden {\n display: none !important;\n}\n\n.filer-info-bar {\n min-height: 15px;\n margin: 0 0 2px !important;\n padding: 15px 20px;\n box-shadow: 0 0 10px -2px rgba(black, 0.2);\n background-color: $white;\n}\n\n.navigator .actions span.all,\n.navigator .actions span.clear,\n.navigator .actions span.question {\n font-size: 13px;\n margin: 0 0.5em;\n display: none;\n}\n\n#all-items-action-toggle {\n display: none !important;\n}\n","// #############################################################################\n// SETTINGS\n\n$speed-base: 200ms;\n\n// COLORS\n$white: var(--dca-white, var(--body-bg, #fff));\n$black: var(--dca-black, var(--body-fg, #000));\n$shadow-black: #000;\n\n$color-primary: var(--dca-primary, var(--primary, #0bf));\n// $color-primary-light: #f1faff;\n$color-success: #693;\n$color-danger: #f00;\n$color-warning: #c93;\n\n// COLORS gray\n$gray: var(--dca-gray, var(--body-quiet-color, #666)); // #666;\n$gray-lightest: var(--dca-gray-lightest, var(--darkened-bg, #f2f2f2)); // #f2f2f2\n$gray-lighter: var(--dca-gray-lighter, var(--border-color, #ddd)); // #ddd\n$gray-light: var(--dca-gray-light, var(--body-quiet-color, #999)); // #999\n$gray-darker: var(--dca-gray-darker, #454545); // #454545\n$gray-darkest: var(--dca-gray-darkest, var(--body-fg, #333)); // #333\n\n$gray-super-light: var(--dca-gray-super-lightest, var(--darkened-bg, #f7f7f7));\n$gray-dropzone: $gray-lightest;\n\n$hover-bg: $gray-lightest;\n\n//##############################################################################\n// BASE Variables\n$font-size-small: 12px;\n$font-size-normal: 14px;\n$font-size-large: 16px;\n\n$icon-size: 16px;\n\n$line-height-normal: 20px;\n\n$border-radius-base: var(--dca-btn-radius, 3px);\n$border-radius-normal: var(--dca-border-radius, 5px);\n\n$padding-base: 3px;\n$padding-normal: 10px;\n$padding-large: 20px;\n\n$screen-mobile: 320px;\n$screen-tablet: 720px;\n$screen-desktop: 975px;\n\n$screen-tablet-filer: 810px;\n\n//##############################################################################\n// BUTTONS\n\n$btn-border-radius-base: var(--button-radius, 3px);\n$btn-active-shadow: inset 0 3px 5px rgba($black, 0.125);\n\n$btn-default-color: var(--dca-gray-light, var(--button-fg, #999));\n$btn-default-bgcolor: var(--dca-white, var(--button-bg, #fff));\n$btn-default-border: var(--dca-gray-lighter, transparent);\n\n$btn-action-color: var(--dca-white, var(--button-fg, #fff));\n$btn-action-bgcolor: $color-primary;\n$btn-action-border: $color-primary;\n\n//##############################################################################\n// #SHADOW\n\n$base-box-shadow: 0 0 5px 0 rgba($shadow-black, 0.2);\n$dropdown-shadow: 0 1px 10px rgba($shadow-black, 0.25);\n","//##############################################################################\n// IMAGE INFO\n\n.image-info {\n position: relative;\n float: right;\n box-sizing: border-box;\n width: 28%;\n margin-top: 0;\n border: 0;\n border-radius: 3px;\n background: $white;\n box-shadow: 0 0 5px 0 rgba(black,0.2);\n .image-details,\n .actions-list {\n margin: 0;\n padding: 0;\n &.image-details {\n margin: 10px 0;\n padding: 0 10px;\n }\n li {\n list-style-type: none;\n }\n a {\n cursor: pointer;\n }\n }\n &.image-info-detail {\n @include clearfix();\n position: static;\n float: none;\n width: 100%;\n margin-bottom: 20px;\n padding: 25px;\n border-radius: 0;\n // removes background color and shadow from object tools and fixes placement on image detail page\n + #content-main .object-tools {\n margin-top: 20px;\n margin-right: 20px;\n background-color: transparent;\n &:before {\n display: none;\n }\n }\n .image-details-left {\n float: left;\n }\n .image-details-right {\n float: left;\n margin-left: 50px;\n }\n .image-details,\n .actions-list {\n margin-top: 0;\n border: 0 !important;\n &.image-details {\n margin-top: 20px;\n margin-bottom: 15px;\n padding: 0;\n }\n dt {\n float: left;\n color: $gray-light;\n font-size: 13px;\n // required for django CMS without admin styles #673\n line-height: 1rem !important;\n font-weight: normal;\n // required for django CMS without admin styles #673\n margin-top: 0;\n }\n dd {\n color: $gray;\n font-size: 13px;\n // required for django CMS without admin styles #673\n line-height: $font-size-large !important;\n padding-left: 80px;\n // required for django CMS without admin styles #673\n margin-bottom: 5px;\n }\n .text {\n font-size: 13px;\n margin-right: 15px;\n strong {\n font-size: 13px;\n }\n }\n li {\n color: $gray;\n font-size: 13px !important;\n font-weight: normal !important;\n padding: 1px 0 !important;\n border: 0 !important;\n }\n a {\n padding: 0;\n }\n }\n .image-info-title {\n overflow: hidden;\n color: $gray;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 0 0 5px;\n .icon {\n float: left;\n margin-right: 5px;\n }\n }\n .image-preview-container {\n text-align: left;\n margin: 20px 0 0;\n padding: 0;\n > img {\n margin-bottom: 15px;\n }\n }\n .actions-list {\n .icon {\n font-size: 16px;\n &:last-child {\n float: none;\n }\n }\n }\n }\n @media screen and (max-width: $screen-tablet) {\n float: none;\n width: 100%;\n &.image-info-detail {\n .image-details-left,\n .image-details-right {\n float: none;\n margin-left: 0;\n }\n }\n }\n}\n\n.image-info-close {\n position: absolute;\n top: -10px;\n right: -7px;\n font-size: 20px;\n cursor: pointer;\n}\n\n.image-info-title {\n padding: 5px 10px;\n border-bottom: solid 1px $gray-lighter;\n a {\n margin-left: 5px;\n }\n}\n\n.image-preview-container {\n text-align: center;\n margin: 10px 0;\n padding: 0 10px;\n .image-preview {\n display: inline-block;\n position: relative;\n margin-bottom: 15px;\n outline: 1px solid $gray-lightest;\n background-image: url(\"data:image/gif;base64,R0lGODlhCAAIAKECAOPj4/z8/P///////yH5BAEKAAIALAAAAAAIAAgAAAINhBEZh8q6DoTPSWvoKQA7\");\n img {\n display: block;\n }\n }\n .image-preview-field {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n }\n .image-preview-circle {\n position: relative;\n z-index: 1;\n width: 26px;\n height: 26px;\n border: solid 2px $color-danger;\n margin: -13px;\n border-radius: 30px;\n cursor: move;\n background: rgba(255, 255, 255, 0.5);\n }\n audio, video {\n margin-bottom: 15px;\n &:focus {\n outline: none;\n }\n }\n}\n\n.button-group .button {\n margin-right: 10px;\n padding: 10px 15px;\n}\n","// #############################################################################\n// OTHER\n\n// add clearfix which doesnt add overflow:hidden\n@mixin clearfix() {\n &:before,\n &:after {\n content: \" \";\n display: table;\n }\n &:after {\n clear: both;\n }\n}\n// taken from bootstrap with adaptations\n@function important($important) {\n @if($important == true) {\n @return !important;\n } @else {\n @return true;\n }\n}\n/* @mixin button-variant($color, $background, $border, $important: false) {\n background-image: none important($important);\n margin-bottom: 0; // For input.btn\n padding: 6px 20px important($important);\n border-radius: $btn-border-radius-base important($important);\n color: $color important($important);\n font-size: $font-size-small important($important);\n line-height: $font-size-small;\n font-weight: normal;\n text-transform: none important($important);\n letter-spacing: normal important($important);\n background-color: $background important($important);\n border: 1px solid $border important($important);\n background-clip: padding-box;\n appearance: none;\n &:focus {\n color: $color important($important);\n background-color: darken($background, 5%) important($important);\n border-color: darken($border, 5%) important($important);\n text-decoration: none important($important);\n }\n &:hover {\n color: $color important($important);\n background-color: darken($background, 5%) important($important);\n border-color: darken($border, 5%) important($important);\n text-decoration: none important($important);\n }\n &:active {\n color: $color important($important);\n background-color: darken($background, 10%) important($important);\n border-color: darken($border, 10%) important($important);\n box-shadow: $btn-active-shadow important($important);\n\n &:hover,\n &:focus {\n color: $color important($important);\n background-color: darken($background, 17%) important($important);\n border-color: darken($border, 25%) important($important);\n }\n }\n &:active {\n background-image: none important($important);\n }\n &[disabled] {\n &,\n &:hover,\n &:focus,\n &:active {\n background-color: rgba($background, 0.4) important($important);\n border-color: rgba($border, 0.4) important($important);\n color: rgba($color, 0.8) important(1);\n cursor: not-allowed;\n box-shadow: none important($important);\n &:before {\n color: rgba($color, 0.4) important(1);\n }\n }\n }\n}*/\n\n@mixin button-variant($color, $background, $border, $important: false) {\n background-image: none important($important);\n margin-bottom: 0; // For input.btn\n border-radius: $btn-border-radius-base important($important);\n color: $color important($important);\n background-color: $background important($important);\n border: 1px solid $border important($important);\n background-clip: padding-box;\n -webkit-appearance: none;\n &:focus,\n &.focus,\n &:hover {\n color: $color important($important);\n @if $background == $btn-default-bgcolor {\n background-color: $gray-lightest important($important);\n border-color: $border important($important);\n } @else {\n background-color: $background important($important);\n border-color: $border important($important);\n filter: invert(0.05) important($important);\n }\n text-decoration: none important($important);\n }\n &:active,\n &.cms-btn-active {\n color: $color important($important);\n background-color: $background important($important);\n border-color: $border important($important);\n filter: brightness(var(--active-brightness)) opacity(1) important($important);\n // Strange: removing opacity(1.) or correcting it makes item transparent\n box-shadow: $btn-active-shadow important($important);\n\n &:hover,\n &:focus,\n &.focus {\n color: $color important($important);\n background-color: $background important($important);\n border-color: $border important($important);\n filter: brightness(calc(var(--focus-brightness) * var(--active-brightness))) opacity(1) important($important);\n } // Strange: removing opacity(1.) or correcting it makes item transparent\n }\n &:active,\n &.cms-btn-active {\n background-image: none important($important);\n }\n &.cms-btn-disabled,\n &[disabled] {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.cms-btn-active { // TODO: FABR\n background-color: $background important($important);\n border-color: $border important($important);\n @if $color == $gray {\n color: $gray-lighter important(1);\n } @else {\n color: $color important(1);\n filter: brightness(0.6) opacity(1); // Strange: removing opacity(1.) or correcting it makes item transparent\n }\n cursor: not-allowed;\n box-shadow: none important($important);\n &:before {\n @if $color == $gray {\n color: $gray-lighter important(1);\n } @else {\n color: $color important(1);\n filter: brightness(0.6) opacity(1); // Strange: removing opacity(1.) or correcting it makes item transparent\n }\n }\n }\n }\n}\n","//##############################################################################\n// ACTION LIST\n\n.actions-list-dropdown {\n a {\n display: block;\n padding: 5px 10px;\n }\n .caret-down {\n display: inline-block;\n }\n .caret-right {\n display: none;\n }\n &.js-collapsed {\n border-bottom: solid 1px $gray-lighter;\n .caret-down {\n display: none;\n }\n .caret-right {\n display: inline-block;\n }\n }\n}\n.actions-list {\n border-top: solid 1px $gray-lighter;\n &:last-child {\n border-top: none;\n a {\n border-bottom: none;\n }\n }\n a {\n display: block;\n font-size: 20px;\n padding: 5px 10px;\n border-bottom: solid 1px $gray-lighter;\n }\n .icon {\n &:first-child {\n width: 20px;\n }\n &:last-child {\n float: right;\n margin-top: 3px;\n }\n }\n}\n.actions-separated-list {\n display: inline-block;\n margin: 0;\n padding-left: 0;\n @media screen and (max-width: $screen-tablet) {\n float: left;\n margin-left: 0;\n }\n li {\n display: inline-block;\n line-height: 34px;\n vertical-align: middle;\n padding: 0 10px;\n list-style: none;\n @media screen and (max-width: $screen-tablet) {\n &:first-child {\n padding-left: 0;\n }\n }\n span {\n vertical-align: middle;\n }\n a {\n color: $gray;\n }\n }\n span:before {\n font-size: 18px;\n }\n}\n","//##############################################################################\n// FILTER FILES\n\n.search-is-focused {\n .filter-files-container {\n position: static;\n }\n .filter-filers-container-inner {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n @media screen and (max-width: $screen-tablet) {\n position: static;\n }\n }\n .breadcrumbs-container {\n position: relative;\n }\n &.breadcrumb-min-width .filter-filers-container-inner {\n position: static;\n }\n}\n\n.filter-files-container {\n @include clearfix;\n display: table-cell;\n vertical-align: middle;\n position: relative;\n width: 245px;\n margin: 0;\n padding: 0;\n background: none;\n box-shadow: none;\n z-index: 1000;\n @media screen and (max-width: $screen-tablet) {\n display: block;\n width: auto;\n margin-right: 0;\n margin-top: 10px;\n .filter-files-button {\n float: none;\n }\n }\n .filer-dropdown-container {\n position: absolute;\n top: 0;\n right: 0;\n > a {\n &,\n &:visited,\n &:link:visited,\n &:link {\n display: inline-block;\n line-height: 34px;\n text-align: center;\n width: 34px;\n height: 34px;\n padding: 0;\n }\n }\n &.open + .filer-dropdown-menu-checkboxes {\n display: block;\n width: calc(100% - 30px);\n li {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n }\n }\n .filter-search-wrapper {\n position: relative;\n float: left;\n text-align: right;\n width: calc(100% - 43px);\n margin-right: 5px;\n @media screen and (max-width: $screen-tablet) {\n float: left;\n }\n .filer-dropdown-container span {\n line-height: 34px !important;\n height: 34px !important;\n }\n }\n .filter-files-button {\n float: right;\n text-align: center;\n white-space: nowrap;\n height: 35px;\n margin: 0;\n padding: 8px !important;\n .icon {\n position: relative;\n left: 2px;\n font-size: 16px !important;\n vertical-align: top;\n }\n }\n .filter-files-field {\n color: $gray-darkest;\n font-size: 12px !important;\n line-height: 35px;\n font-weight: normal;\n box-sizing: border-box;\n min-width: 200px !important;\n height: 35px;\n // required for django CMS <= 3.1 #673\n margin: 0;\n padding: 0 35px 0 10px !important;\n outline: none;\n appearance: none;\n transition: max-width $speed-base;\n // disable clear X on IE #690\n &::-ms-clear {\n display: none;\n }\n }\n .filer-dropdown-menu {\n margin-top: 0 !important;\n margin-right: -1px !important;\n }\n}\n.filter-files-cancel {\n margin: 5px 20px;\n}\n","//##############################################################################\n// NAVIGATOR\n\nbody {\n &.dz-drag-hover {\n .drag-hover-border {\n display: none !important;\n }\n .navigator-table tbody td,\n .navigator-table tbody .unfiled td {\n background-color: $hover-bg !important;\n }\n }\n &.reset-hover td {\n background-color: $white !important;\n }\n}\n.drag-hover-border {\n position: fixed;\n border-top: solid 2px $color-primary;\n border-bottom: solid 2px $color-primary;\n pointer-events: none;\n z-index: 100;\n display: none;\n}\n.thumbnail-drag-hover-border {\n border: solid 2px $color-primary;\n}\n.filebrowser .navigator-list,\n.filebrowser .navigator-table {\n // required for django CMS <= 3.1 #673\n width: 100%;\n margin: 0;\n border-top: solid 1px $gray-lighter !important;\n border-collapse: collapse !important;\n .navigator-header,\n thead th,\n tbody td {\n text-align: left;\n font-weight: normal;\n vertical-align: middle;\n padding: 5px !important;\n border-left: 0 !important;\n border-bottom: 1px solid $gray-lighter;\n border-top: 1px solid transparent;\n background: none !important;\n }\n tbody tr.selected {\n .action-button span {\n color: $gray-darkest !important;\n }\n }\n .navigator-body,\n .unfiled td {\n padding: 12px 5px !important;\n background-color: $gray-super-light !important;\n a,\n a:hover {\n color: $gray !important;\n }\n }\n .column-checkbox {\n text-align: center;\n width: 20px;\n padding-left: 20px !important;\n input {\n // makes sure that checkbox is vertical aligned #664\n vertical-align: middle;\n margin: 0;\n }\n }\n .column-name a {\n color: $color-primary;\n }\n .column-icon {\n width: 50px;\n // removes padding to make sure that column has correct height #664\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .column-action {\n text-align: center;\n width: 90px;\n white-space: nowrap;\n padding-right: 20px !important;\n a {\n font-size: 16px !important;\n margin: 0;\n }\n .action-button {\n @include button-variant($btn-default-color, $btn-default-bgcolor, $btn-default-border, true);\n margin: 3px;\n padding: 2px 6px 8px !important;\n span {\n font-size: 17px;\n line-height: 33px;\n vertical-align: middle;\n }\n }\n }\n .no-files {\n color: $gray;\n font-size: $font-size-normal;\n text-align: center;\n padding: 40px 0 !important;\n background-color: $gray-lightest !important;\n span {\n font-size: 20px;\n margin-right: 10px;\n &:before {\n vertical-align: sub;\n }\n }\n }\n .dz-drag-hover {\n td {\n position: relative;\n background: $hover-bg !important;\n box-sizing: border-box !important;\n a {\n &.icon {\n color: $gray-darkest !important;\n background-color: $white !important;\n }\n color: $color-primary !important;\n }\n }\n }\n &.dz-drag-hover {\n position: relative;\n .drag-hover-border {\n display: none !important;\n }\n td {\n background: $hover-bg !important;\n box-sizing: border-box !important;\n }\n }\n .reset-hover,\n &.reset-hover {\n td {\n background-color: $white !important;\n }\n .dz-drag-hover {\n td {\n background: $hover-bg !important;\n }\n }\n }\n}\n.navigator-top-nav {\n position: relative;\n clear: both;\n min-height: 35px;\n padding: 15px 20px;\n background: $gray-super-light;\n border-bottom: $gray-lighter solid 1px;\n .breadcrumbs-container-wrapper {\n display: table;\n width: 100%;\n @media screen and (max-width: $screen-tablet) {\n display: block;\n }\n }\n .breadcrumbs-container-inner {\n display: table;\n table-layout: fixed;\n width: 100%;\n .filer-dropdown-container {\n display: table-cell;\n width: 30px;\n height: 35px;\n vertical-align: middle;\n span {\n line-height: 35px;\n height: 35px;\n vertical-align: middle;\n }\n }\n }\n .breadcrumbs-container {\n display: table-cell;\n vertical-align: middle;\n @media screen and (max-width: $screen-tablet) {\n position: static;\n margin-right: 20px;\n }\n }\n .tools-container {\n @include clearfix;\n display: table-cell;\n vertical-align: middle;\n text-align: right;\n margin-top: 2px;\n @media screen and (max-width: $screen-tablet) {\n display: inline;\n text-align: left;\n }\n }\n .nav-button {\n display: inline-block;\n color: $gray;\n font-size: 20px;\n line-height: 34px;\n vertical-align: top;\n margin: 0 10px;\n span {\n vertical-align: middle;\n }\n }\n .nav-button-filter {\n position: relative;\n top: -1px;\n }\n .nav-button-dots {\n margin: 0;\n padding: 0 15px;\n }\n .separator {\n display: inline-block;\n position: relative;\n vertical-align: top;\n width: 1px;\n height: 34px;\n margin: 0 5px;\n &:before {\n content: \"\";\n display: block;\n position: absolute;\n top: -14px;\n bottom: -11px;\n overflow: hidden;\n width: 1px;\n background-color: $gray-lighter;\n }\n }\n}\n.breadcrumb-min-width {\n .filer-navigator-breadcrumbs-dropdown-container,\n .navigator-breadcrumbs-name-dropdown-wrapper,\n .navigator-breadcrumbs-folder-name-wrapper,\n .breadcrumbs-container-wrapper,\n .breadcrumbs-container,\n .tools-container,\n .filter-files-container,\n .navigator-breadcrumbs,\n .navigator-button-wrapper {\n display: inline-block;\n text-align: left;\n .actions-wrapper {\n white-space: nowrap;\n margin-left: 0;\n margin-top: 10px;\n li:first-child {\n padding-left: 0;\n }\n }\n }\n .navigator-button-wrapper {\n margin-top: 10px;\n }\n .navigator-breadcrumbs-name-dropdown-wrapper {\n min-height: inherit;\n .filer-dropdown-container .fa-caret-down {\n vertical-align: text-top;\n }\n }\n .breadcrumbs-container-inner .filer-dropdown-container {\n display: inline-block !important;\n }\n .navigator-tools {\n white-space: normal;\n }\n .filter-files-container {\n width: 100%;\n margin-top: 10px;\n z-index: auto;\n }\n .breadcrumbs-container {\n margin-right: 0;\n }\n .navigator-breadcrumbs .icon {\n vertical-align: middle;\n }\n .navigator-breadcrumbs-folder-name-wrapper {\n float: left;\n width: calc(100% - 30px);\n }\n}\n\n.navigator-tools {\n @include clearfix;\n white-space: nowrap;\n @media screen and (max-width: $screen-tablet) {\n display: inline;\n }\n .actions-wrapper {\n display: inline-block;\n margin-bottom: 0;\n margin-left: 10px;\n a, a:hover {\n color: $gray-light !important;\n cursor: not-allowed;\n }\n @media screen and (max-width: $screen-tablet) {\n @include clearfix();\n float: none;\n margin-left: 0;\n }\n &.action-selected {\n a {\n color: $gray !important;\n cursor: pointer;\n }\n .actions-separated-list {\n display: inline-block;\n }\n }\n + .filer-list-type-switcher-wrapper {\n border-left: solid 1px $gray-lighter;\n margin-left: 0;\n }\n }\n .actions {\n display: none;\n float: right;\n @media screen and (max-width: $screen-tablet) {\n @include clearfix();\n float: none;\n margin-bottom: 10px;\n }\n .all,\n .question,\n .clear,\n .action-counter {\n font-size: $font-size-small;\n line-height: 34px;\n vertical-align: text-top;\n }\n .action-counter,\n .all {\n color: $gray-light;\n }\n .question,\n .clear {\n margin-left: 10px;\n padding-left: 10px;\n border-left: solid 1px $gray-lighter;\n }\n }\n .filer-list-type-switcher-wrapper {\n display: inline-block;\n margin-left: 10px;\n }\n\n}\n@media screen and (max-width: $screen-tablet) {\n .navigator-top-nav {\n .breadcrumbs-container {\n float: none;\n }\n .navigator-tools {\n float: none;\n .separator:before {\n top: 0;\n bottom: 0;\n }\n }\n }\n}\n// make sure that buttons break to new line on mobile view #677\n.navigator-button-wrapper {\n display: inline-block;\n vertical-align: top;\n text-align: right;\n margin-bottom: 0;\n margin-left: 10px;\n @media screen and (max-width: $screen-tablet) {\n display: block;\n float: none;\n text-align: left;\n margin-top: 0;\n margin-left: 0;\n }\n}\n.navigator-button {\n margin-right: 10px;\n &,\n &:visited,\n &:link:visited,\n &:link {\n @include button-variant($btn-action-color, $btn-action-bgcolor, $btn-action-border, true);\n display: inline-block;\n vertical-align: top;\n padding: 10px 20px !important;\n }\n .icon {\n position: relative;\n margin-right: 3px;\n }\n .fa-folder {\n top: 0;\n }\n &.navigator-button-upload {\n margin-right: 0;\n }\n}\n\n.upload-button-disabled {\n display: inline-block;\n}\n.navigator-button + .filer-dropdown-menu {\n margin-top: -2px;\n}\n\n.navigator {\n position: relative;\n overflow-x: auto;\n width: 100%;\n form {\n margin: 0;\n padding: 0;\n box-shadow: none;\n }\n}\n\n.filer-dropdown-container {\n display: inline-block;\n position: relative;\n vertical-align: top;\n .fa-caret-down, .cms-icon-caret-down {\n font-size: 14px;\n }\n .filer-dropdown-menu,\n + .filer-dropdown-menu {\n display: none;\n right: 0;\n left: auto;\n border: 0;\n box-shadow: $dropdown-shadow;\n > li > a {\n display: block;\n color: $color-primary;\n font-weight: normal;\n white-space: normal;\n padding: 12px 20px !important;\n @media screen and (min-width: $screen-tablet) {\n white-space: nowrap;\n }\n }\n label {\n display: block;\n line-height: 20px !important;\n text-transform: none;\n width: auto;\n margin: 5px 0 !important;\n padding: 0 10px !important;\n }\n input {\n position: relative;\n top: 4px;\n vertical-align: top;\n margin-right: 5px;\n }\n &.filer-dropdown-menu-checkboxes {\n width: 0;\n min-height: 50px;\n padding: 15px;\n border: 0;\n box-shadow: $dropdown-shadow;\n &:before {\n display: none;\n }\n .fa-close {\n position: absolute;\n top: 10px;\n right: 10px;\n color: $gray;\n cursor: pointer;\n &:hover {\n color: $color-primary;\n }\n }\n p {\n color: $gray-light !important;\n font-weight: normal;\n text-transform: uppercase;\n margin-bottom: 5px;\n }\n label {\n color: $gray !important;\n font-weight: normal;\n padding: 0 !important;\n margin-top: 0 !important;\n input {\n margin-left: 0;\n }\n }\n }\n a:hover {\n color: $white !important;\n background: $color-primary !important;\n }\n }\n &.open .filer-dropdown-menu {\n display: block;\n li {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n }\n + .separator {\n margin-right: 10px;\n }\n}\n.filer-dropdown-container-down {\n > a {\n &,\n &:link,\n &:visited,\n &:link:visited {\n color: $gray;\n font-size: 20px;\n line-height: 35px;\n height: 35px;\n padding: 0 10px;\n }\n }\n .filer-dropdown-menu {\n right: auto;\n left: -14px;\n margin-right: 10px;\n }\n}\n\n.filer-dropdown-menu {\n position: absolute;\n top: 100%;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n margin: 2px 0 0;\n margin-top: 0 !important;\n padding: 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: $white;\n border-radius: 4px;\n background-clip: padding-box;\n &:before {\n position: absolute;\n top: -5px;\n left: 35px;\n z-index: -1;\n content: '';\n width: 10px;\n height: 10px;\n margin-left: -5px;\n transform: rotate(45deg);\n background-color: $white;\n }\n &.create-menu-dropdown:before {\n left: auto;\n right: 17px;\n }\n}\n\n.navigator-breadcrumbs {\n @include clearfix;\n display: table-cell;\n vertical-align: middle;\n font-size: 16px;\n white-space: nowrap;\n width: 60px;\n > a {\n color: $gray-darkest !important;\n }\n .icon {\n color: $gray-light;\n line-height: 35px;\n height: 35px;\n margin: 0 5px;\n &:before {\n vertical-align: middle;\n }\n }\n li {\n list-style-type: none;\n }\n}\n.navigator-breadcrumbs-folder-name-wrapper {\n display: table-cell;\n overflow: hidden;\n font-size: 16px;\n font-weight: bold;\n vertical-align: middle;\n white-space: nowrap;\n}\n.navigator-breadcrumbs-folder-name {\n display: block;\n overflow: hidden;\n white-space: normal;\n line-height: 35px;\n width: 100%;\n height: 35px;\n}\n.navigator-breadcrumbs-folder-name-inner {\n display: block;\n position: relative;\n overflow: hidden;\n line-height: 35px;\n height: 35px;\n width: 100%;\n text-overflow: ellipsis;\n}\n.filer-navigator-breadcrumbs-dropdown-container {\n position: relative;\n float: left;\n vertical-align: middle;\n margin: 0 7px 0 0;\n > a img {\n padding: 3px 0;\n }\n .navigator-breadcrumbs-dropdown {\n left: -15px !important;\n min-width: 200px;\n padding: 0;\n margin-top: 0;\n border: 0;\n box-shadow: $dropdown-shadow;\n > li {\n padding: 0;\n > a {\n color: $color-primary;\n padding: 12px 20px 3px !important;\n border-bottom: solid 1px $gray-lightest;\n &:hover {\n color: $white !important;\n background: $color-primary !important;\n }\n }\n &:last-child > a {\n border-bottom: none;\n }\n }\n img {\n position: relative;\n top: -5px;\n vertical-align: top;\n margin: 0 10px 0 0;\n }\n }\n}\n\n.navigator-dropdown-arrow-up {\n position: relative;\n left: 20px;\n overflow: hidden;\n width: 20px;\n height: 20px;\n margin-top: -20px;\n z-index: 1001;\n &:after {\n content: \"\";\n position: absolute;\n top: 15px;\n left: 5px;\n width: 10px;\n height: 10px;\n background: white;\n transform: rotate(45deg);\n box-shadow: $dropdown-shadow;\n }\n}\n\n.navigator-breadcrumbs-name-dropdown-wrapper {\n display: table;\n min-height: 35px;\n .filer-dropdown-menu {\n left: auto;\n right: -80px;\n &:before {\n right: 80px;\n left: auto;\n }\n }\n a {\n display: inline-block;\n }\n}\n\n.empty-filer-header-cell {\n display: table-cell;\n vertical-align: middle;\n}\n\n.filebrowser .navigator-thumbnail-list {\n overflow: hidden;\n .navigator-list {\n border-top: 0 !important;\n }\n .navigator-thumbnail-list-header {\n & > * {\n display: inline-block;\n text-transform: uppercase;\n margin: 0;\n padding: 0;\n padding-left: 10px;\n }\n .navigator-checkbox {\n float: right;\n padding-right: 20px;\n text-transform: initial;\n color: $color-primary;\n input[type=\"checkbox\"] {\n margin-left: 5px;\n vertical-align: middle;\n }\n }\n }\n .navigator-body {\n @include clearfix;\n padding: 0 !important;\n }\n .thumbnail-item {\n float: left;\n display: inline-block;\n padding: 10px;\n width: calc(var(--thumbnail-size, 120px) + 5px);\n height: calc(var(--thumbnail-size, 120px) + 5px);\n border: 1px solid $gray-lighter;\n margin: 16px 12px;\n background-color: $white;\n position: relative;\n overflow: hidden;\n .thumbnail-file-item-box {\n padding: 10px;\n width: calc(var(--thumbnail-size, 120px) + 5px);\n height: calc(var(--thumbnail-size, 120px) + 5px);\n border: 1px solid $gray-lighter;\n margin: 16px 12px;\n background-color: $white;\n &:hover {\n background-color: #f1faff;\n }\n }\n .navigator-checkbox {\n position: absolute;\n top: 5px;\n left: 5px;\n input {\n margin: 0;\n vertical-align: top;\n }\n }\n .item-thumbnail,\n .item-icon {\n height: 50%;\n width: 50%;\n margin: 10px auto;\n margin-bottom: 18px;\n a {\n display: block;\n height: 100%;\n width: 100%;\n }\n img {\n width: 100%;\n height: 100%;\n }\n }\n .item-name {\n background: transparent;\n text-align: center;\n word-break: break-word;\n }\n }\n .thumbnail-virtual-item {\n background-color: initial;\n }\n .thumbnail-folder-item {\n &:hover {\n background-color: #f1faff;\n }\n }\n .thumbnail-file-item {\n float: none;\n width: calc(var(--thumbnail-size, 120px) + 27px);\n height: calc(var(--thumbnail-size, 120px) + 80px);\n border: 0;\n padding: 0;\n background-color: transparent;\n .thumbnail-file-item-box {\n float: none;\n margin: 0;\n margin-bottom: 5px;\n }\n .item-thumbnail {\n margin: 0;\n height: 100%;\n width: 100%;\n }\n .item-name {\n position: relative;\n word-break: break-word;\n }\n }\n}\n\n.insertlinkButton {\n &:before {\n content:\"\" !important; // Necessary since djangocms-admin-style tries to add its own icon\n }\n span {\n font-size: 17px;\n }\n}\n","//##############################################################################\n// MODAL\n\n.popup {\n &.app-cmsplugin_filer_image {\n .form-row.field-image .field-box,\n .field-box.field-free_link,\n .field-box.field-page_link,\n .field-box.field-file_link {\n float: none !important;\n margin-right: 0 !important;\n margin-top: 20px !important;\n &:first-child {\n margin-top: 0 !important\n }\n input {\n width: 100% !important;\n }\n }\n .form-row .field-box {\n &.field-crop,\n &.field-upscale {\n margin-top: 30px;\n }\n }\n }\n &.delete-confirmation .colM ul {\n // makes sure that between list and button is a space #744\n margin-bottom: 25px !important;\n }\n .image-info-detail {\n padding: 0;\n padding-bottom: 25px;\n margin-bottom: 30px;\n box-shadow: none;\n border-bottom: solid 1px $gray-lighter;\n }\n &.change-list.filebrowser {\n #result_list tbody th,\n #result_list tbody td {\n // makes sure that changelist columns has correct height on modal window #665\n height: auto;\n }\n }\n .filer-dropzone {\n padding: 5px 20px;\n }\n form .form-row .filer-dropzone .filerFile {\n top: 8px;\n }\n &.filebrowser #container #content {\n margin: 0 !important;\n }\n .navigator-button-wrapper {\n float: right;\n @media screen and (max-width: $screen-tablet) {\n float: none;\n }\n }\n .navigator-top-nav {\n .tools-container {\n width: 70%;\n }\n .breadcrumbs-container {\n width: 30%;\n }\n .tools-container,\n .breadcrumbs-container {\n @media screen and (max-width: $screen-tablet) {\n width: 100%;\n }\n }\n }\n}\n","//##############################################################################\n// DRAG AND DROP\n\nform .form-row {\n &[class*=\"file\"],\n &[class*=\"folder\"],\n &[class*=\"img\"],\n &[class*=\"image\"],\n &[class*=\"visual\"] {\n .related-widget-wrapper-link {\n display: none;\n }\n }\n .filer-widget + .related-widget-wrapper-link,\n .filer-widget + * + .related-widget-wrapper-link {\n display: none;\n }\n .related-widget-wrapper:has(.filer-widget,.filer-dropzone) {\n width: 100%;\n }\n .filer-dropzone {\n @include clearfix;\n position: relative;\n min-width: 215px;\n border: solid 1px $gray-lighter;\n border-radius: $border-radius-base;\n background-color: $gray-lightest;\n box-sizing: border-box !important;\n .z-index-fix {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n &.dz-drag-hover {\n background-color: $color-primary;\n filter: brightness(1.5);\n border: solid 2px $color-primary !important;\n .z-index-fix {\n z-index: 1;\n }\n .dz-message {\n opacity: 1;\n display: block !important;\n visibility: visible;\n }\n .filerFile {\n display: none;\n }\n .dz-message, .dz-message .icon {\n color: $color-primary !important;\n }\n }\n &.dz-started .fileUpload {\n display: none;\n }\n .dz-preview {\n width: 100%;\n min-height: auto;\n margin-right: 0;\n margin-bottom: 0;\n margin-left: 0;\n padding-bottom: 10px;\n border-bottom: solid 1px $gray-lighter;\n &.dz-error {\n position: relative;\n .dz-error-message {\n display: none;\n }\n &:hover .dz-error-message {\n display: block;\n }\n }\n .dz-details {\n min-width: calc(100% - 80px);\n max-width: calc(100% - 80px);\n margin-top: 7px;\n margin-left: 40px;\n padding: 0;\n opacity: 1;\n .dz-filename,\n .dz-filename:hover,\n .dz-size {\n float: left;\n text-align: left;\n span {\n color: $gray;\n border: 0 !important;\n background-color: transparent !important;\n }\n }\n }\n .dz-remove {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='currentColor' class='bi bi-trash' viewBox='0 0 16 16'%3E%3Cpath d='M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6Z'/%3E%3Cpath d='M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1ZM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118ZM2.5 3h11V2h-11v1Z'/%3E%3C/svg%3E%0A\");\n background-size:contain;\n display: inline-block;\n position: absolute;\n top: 7px;\n right: 25px;\n font: 0/0 a;\n width: 18px;\n height: 18px;\n }\n .dz-error-message {\n top: 65px;\n left: 0;\n width: 100%;\n }\n .dz-success-mark,\n .dz-error-mark {\n top: 5px;\n right: 0;\n left: auto;\n margin-top: 0;\n &:before {\n color: $gray;\n }\n svg {\n display: none;\n }\n }\n .dz-success-mark {\n // Check icon\n width: 16px;\n height: 16px;\n background-image: url(\"data:image/svg+xml,%3Csvg width='13' height='13' viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%2370bf2b' d='M1412 734q0-28-18-46l-91-90q-19-19-45-19t-45 19l-408 407-226-226q-19-19-45-19t-45 19l-91 90q-18 18-18 46 0 27 18 45l362 362q19 19 45 19 27 0 46-19l543-543q18-18 18-45zm252 162q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z'/%3E%3C/svg%3E%0A\");\n background-size: contain;\n }\n .dz-error-mark {\n // Remove icon\n background-image: url(\"data:image/svg+xml,%3Csvg width='13' height='13' viewBox='0 0 1792 1792' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23dd4646' d='M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z'/%3E%3C/svg%3E%0A\");\n width: 16px;\n height: 16px;\n background-size: contain;\n }\n &.dz-image-preview,\n &.dz-file-preview {\n background-color: transparent;\n .dz-image {\n overflow: hidden;\n width: 36px;\n height: 36px;\n border: solid 1px $gray-lighter;\n border-radius: 0;\n img {\n width: 100%;\n height: auto;\n }\n }\n }\n .dz-progress {\n top: 18px;\n left: 0;\n width: calc(100% - 40px);\n height: 10px;\n margin-left: 40px;\n }\n }\n .dz-message {\n float: right;\n color: $gray-dropzone;\n width: 100%;\n margin: 15px 0 0;\n }\n .icon {\n position: relative;\n top: 3px;\n color: $gray-dropzone;\n font-size: 24px;\n margin-right: 10px;\n }\n .filerFile .related-lookup {\n @include button-variant($btn-action-color, $btn-action-bgcolor, $btn-action-border, true);\n float: left !important;\n overflow: hidden;\n // makes true that button has correct height #668\n line-height: $font-size-normal;\n width: auto !important;\n height: auto !important;\n padding: 10px 20px !important;\n margin-top: 24px;\n margin-left: 10px;\n text-align: center !important;\n cursor: pointer;\n .cms-icon {\n color: $white;\n font-size: 17px;\n margin: 0 10px 0 0;\n vertical-align: middle;\n }\n &:before {\n display: none;\n }\n .choose-file,\n .replace-file,\n .edit-file {\n color: $white;\n margin: 0;\n }\n .replace-file {\n display: none;\n }\n &.edit {\n display: none;\n }\n &.related-lookup-change {\n @include button-variant($btn-default-color, $btn-default-bgcolor, $btn-default-border, true);\n float: right !important;\n padding: 5px 0 !important;\n width: 36px !important;\n height: 36px !important;\n &:focus {\n background-color: $white !important;\n }\n span {\n text-align: center;\n line-height: 24px;\n }\n .cms-icon {\n color: $btn-default-color;\n margin-right: 0 !important;\n }\n .choose-file {\n display: none;\n }\n .replace-file {\n display: block;\n }\n &.lookup {\n display: block !important;\n }\n &.edit {\n display: block;\n }\n }\n }\n // makes sure that filer clear button has correct size #669\n .filerClearer {\n width: 36px !important;\n height: 36px !important;\n color: $color-danger;\n }\n .filerFile {\n position: absolute;\n top: 9px;\n // required for django CMS <= 3.1 #673\n left: 20px;\n width: calc(100% - 40px);\n img[src*=nofile] {\n background-color: $white;\n }\n // make sure that text crops if there is not enough space #670\n span:not(:empty):not(.choose-file):not(.replace-file):not(.edit-file) {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n width: calc(100% - 260px);\n height: 80px;\n line-height: 80px;\n }\n // required for django CMS <= 3.1 #673\n img {\n width: 80px;\n height: 80px;\n margin-right: 10px;\n border: solid 1px $gray-lighter;\n border-radius: $border-radius-base;\n vertical-align: top;\n &[src*=\"nofile\"] {\n box-sizing: border-box;\n margin-right: 0;\n border: solid 1px $gray-lighter;\n border-radius: $border-radius-base;\n }\n }\n // required for django CMS <= 3.1\n a {\n box-sizing: border-box;\n padding-top: 10px !important;\n }\n // required for django CMS <= 3.1 #673\n span {\n display: inline-block;\n color: $gray;\n font-weight: normal;\n margin-bottom: 6px;\n text-align: left;\n &:empty + .related-lookup {\n float: none !important;\n margin-left: 0 !important;\n }\n }\n // required for django CMS <= 3.1 #673\n a.filerClearer {\n @include button-variant($btn-default-color, $btn-default-bgcolor, $btn-default-border, true);\n float: right;\n padding: 5px 0 !important;\n margin: 24px 0 0 10px;\n width: 36px;\n height: 36px;\n text-align: center;\n cursor: pointer;\n span:before {\n color: $color-danger !important;\n }\n span {\n text-align: center;\n line-height: 24px;\n }\n }\n\n }\n &.filer-dropzone-mobile {\n .filerFile {\n text-align: center;\n }\n .dz-message {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n // make sure that drag and drop widget looks nice on mobile #670\n margin-top: 75px;\n }\n &.js-object-attached .filerFile {\n text-align: center;\n &.js-file-selector {\n @media screen and (max-width: $screen-tablet-filer) {\n .description_text {\n text-overflow: ellipsis;\n width: calc(100% - 250px);\n overflow: hidden;\n }\n }\n >span:not(.choose-file):not(.replace-file):not(.edit-file), .dz-name {\n width: calc(100% - 250px);\n }\n }\n }\n\n }\n &.filer-dropzone-folder .filerFile {\n top: 8px;\n #id_folder_description_txt {\n float: left;\n }\n }\n\n @media (max-width: 767px) {\n flex-grow: 1;\n }\n\n }\n}\n\n.filer-dropzone {\n min-height: 100px !important;\n .dz-upload {\n height: 5px;\n background-color: $color-primary;\n }\n .dz-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n max-width: calc(100% - 145px);\n }\n .dz-thumbnail {\n display: inline-block;\n overflow: hidden;\n vertical-align: top;\n width: 80px;\n height: 80px;\n margin-right: 10px;\n border: solid 1px $gray-lighter;\n border-radius: 3px;\n background: $white url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='%232980b9' d='M5 2c-1.105 0-2 .9-2 2v18c0 1.1.895 2 2 2h14c1.105 0 2-.9 2-2V8l-6-6z'/%3E%3Cpath fill='%233498db' d='M5 1c-1.105 0-2 .9-2 2v18c0 1.1.895 2 2 2h14c1.105 0 2-.9 2-2V7l-6-6z'/%3E%3Cpath fill='%232980b9' d='m21 7-6-6v4c0 1.1.895 2 2 2z'/%3E%3C/svg%3E\");\n background-size: contain;\n img {\n background: $white;\n &[src=\"\"],\n &:not([src]) {\n width: 104%;\n height: 104%;\n margin: -2%;\n }\n }\n }\n}\n\n.filer-dropzone-info-message {\n position: fixed;\n bottom: 35px;\n left: 50%;\n z-index: 2;\n text-align: center;\n width: 270px;\n max-height: 300px;\n overflow-y: auto;\n margin: -50px 0 0 -150px;\n padding: 15px 15px 0;\n border-radius: $border-radius-base;\n background: $white;\n box-shadow: $base-box-shadow;\n .icon {\n font-size: 35px;\n color: $color-primary;\n }\n .text {\n margin: 5px 0 10px;\n }\n}\n.filer-dropzone-upload-info {\n margin-top: 10px;\n // make sure that file name on upload progress is cut #675\n .filer-dropzone-file-name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n &:empty {\n margin-top: 0;\n }\n}\n.filer-dropzone-progress {\n height: 5px;\n margin-top: 5px;\n background-color: $color-primary;\n}\n\n.filer-dropzone-upload-welcome .folder {\n color: $color-primary;\n padding: 10px 0 0;\n margin: 0 -15px;\n border-top: solid 1px $gray-lighter;\n img,\n span {\n vertical-align: middle;\n }\n img {\n margin-right: 5px;\n }\n .folder-inner {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding: 0 10px;\n }\n}\n\n.filer-dropzone-cancel {\n padding-top: 10px;\n border-top: solid 1px $gray-lighter;\n margin: 15px -15px 10px;\n a {\n font-size: $font-size-small;\n color: $gray !important;\n }\n}\n.filer-dropzone-upload-success,\n.filer-dropzone-upload-canceled {\n margin: 0 -15px 10px;\n}\n\n.filer-dropzone-upload-count {\n padding-bottom: 10px;\n margin: 10px -15px;\n border-bottom: solid 1px $gray-lighter;\n}\n",".filer-tooltip-wrapper {\n position: relative;\n}\n\n.filer-tooltip {\n position: absolute;\n left: -30px;\n right: -30px;\n color: $gray;\n text-align: center;\n font-size: $font-size-small !important;\n line-height: 15px !important;\n white-space: normal;\n margin-top: 5px;\n padding: 10px;\n background-color: $white;\n box-shadow: 0 0 10px rgba(black,.25);\n border-radius: 5px;\n z-index: 10;\n cursor: default;\n &:before {\n position: absolute;\n top: -3px;\n left: 50%;\n z-index: -1;\n content: '';\n width: 9px;\n height: 9px;\n margin-left: -5px;\n transform: rotate(45deg);\n background-color: $white;\n }\n}\n\n.disabled-btn-tooltip {\n display: none;\n outline: none;\n}\n","/*\n * The MIT License\n * Copyright (c) 2012 Matias Meno \n */\n@keyframes passing-through {\n 0% {\n opacity: 0;\n transform: translateY(40px);\n }\n 30%,\n 70% {\n opacity: 1;\n transform: translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateY(-40px);\n }\n}\n@keyframes slide-in {\n 0% {\n opacity: 0;\n transform: translateY(40px);\n }\n 30% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n@keyframes pulse {\n 0% {\n transform: scale(1);\n }\n 10% {\n transform: scale(1.1);\n }\n 20% {\n transform: scale(1);\n }\n}\n.filer-dropzone,\n.filer-dropzone * {\n box-sizing: border-box;\n}\n\n.filer-dropzone {\n min-height: 150px;\n padding: 20px 20px;\n border: 2px solid rgba(0, 0, 0, 0.3);\n background: white;\n}\n.filer-dropzone.dz-clickable {\n cursor: pointer;\n}\n.filer-dropzone.dz-clickable * {\n cursor: default;\n}\n.filer-dropzone.dz-clickable .dz-message,\n.filer-dropzone.dz-clickable .dz-message * {\n cursor: pointer;\n}\n.filer-dropzone.dz-drag-hover {\n border-style: solid;\n}\n.filer-dropzone.dz-drag-hover .dz-message {\n opacity: 0.5;\n}\n.filer-dropzone .dz-message {\n text-align: center;\n margin: 2em 0;\n}\n.filer-dropzone .dz-preview {\n display: inline-block;\n position: relative;\n vertical-align: top;\n min-height: 100px;\n margin: 16px;\n}\n.filer-dropzone .dz-preview:hover {\n z-index: 1000;\n}\n.filer-dropzone .dz-preview:hover .dz-details {\n opacity: 1;\n}\n.filer-dropzone .dz-preview.dz-file-preview .dz-image {\n border-radius: 20px;\n background: $gray-light;\n background: linear-gradient(to bottom, $gray-lightest, $gray-lighter);\n}\n.filer-dropzone .dz-preview.dz-file-preview .dz-details {\n opacity: 1;\n}\n.filer-dropzone .dz-preview.dz-image-preview {\n background: white;\n}\n.filer-dropzone .dz-preview.dz-image-preview .dz-details {\n transition: opacity 0.2s linear;\n}\n.filer-dropzone .dz-preview .dz-remove {\n display: block;\n font-size: 14px;\n text-align: center;\n border: none;\n cursor: pointer;\n}\n.filer-dropzone .dz-preview .dz-remove:hover {\n text-decoration: underline;\n}\n.filer-dropzone .dz-preview:hover .dz-details {\n opacity: 1;\n}\n.filer-dropzone .dz-preview .dz-details {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 20;\n color: rgba(0, 0, 0, 0.9);\n font-size: 13px;\n line-height: 150%;\n text-align: center;\n min-width: 100%;\n max-width: 100%;\n padding: 2em 1em;\n opacity: 0;\n}\n.filer-dropzone .dz-preview .dz-details .dz-size {\n font-size: 16px;\n margin-bottom: 1em;\n}\n.filer-dropzone .dz-preview .dz-details .dz-filename {\n white-space: nowrap;\n}\n.filer-dropzone .dz-preview .dz-details .dz-filename:hover span {\n border: 1px solid rgba(200, 200, 200, 0.8);\n background-color: rgba(255, 255, 255, 0.8);\n}\n.filer-dropzone .dz-preview .dz-details .dz-filename:not(:hover) {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.filer-dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {\n border: 1px solid transparent;\n}\n.filer-dropzone .dz-preview .dz-details .dz-filename span,\n.filer-dropzone .dz-preview .dz-details .dz-size span {\n padding: 0 0.4em;\n border-radius: 3px;\n background-color: rgba(255, 255, 255, 0.4);\n}\n.filer-dropzone .dz-preview:hover .dz-image img {\n transform: scale(1.05, 1.05);\n\n filter: blur(8px);\n}\n.filer-dropzone .dz-preview .dz-image {\n display: block;\n position: relative;\n overflow: hidden;\n z-index: 10;\n width: 120px;\n height: 120px;\n border-radius: 20px;\n}\n.filer-dropzone .dz-preview .dz-image img {\n display: block;\n}\n.filer-dropzone .dz-preview.dz-success .dz-success-mark {\n animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n}\n.filer-dropzone .dz-preview.dz-error .dz-error-mark {\n opacity: 1;\n animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n}\n.filer-dropzone .dz-preview .dz-success-mark,\n.filer-dropzone .dz-preview .dz-error-mark {\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 500;\n margin-top: -27px;\n margin-left: -27px;\n pointer-events: none;\n opacity: 0;\n}\n.filer-dropzone .dz-preview .dz-success-mark svg,\n.filer-dropzone .dz-preview .dz-error-mark svg {\n display: block;\n width: 54px;\n height: 54px;\n}\n.filer-dropzone .dz-preview.dz-processing .dz-progress {\n opacity: 1;\n transition: all 0.2s linear;\n}\n.filer-dropzone .dz-preview.dz-complete .dz-progress {\n opacity: 0;\n transition: opacity 0.4s ease-in;\n}\n.filer-dropzone .dz-preview:not(.dz-processing) .dz-progress {\n animation: pulse 6s ease infinite;\n}\n.filer-dropzone .dz-preview .dz-progress {\n position: absolute;\n top: 50%;\n left: 50%;\n overflow: hidden;\n z-index: 1000;\n width: 80px;\n height: 16px;\n margin-top: -8px;\n margin-left: -40px;\n border-radius: 8px;\n pointer-events: none;\n opacity: 1;\n background: rgba(255, 255, 255, 0.9);\n}\n.filer-dropzone .dz-preview .dz-progress .dz-upload {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 0;\n background: $gray-darkest;\n background: linear-gradient(to bottom, $gray, $gray-darkest);\n transition: width 300ms ease-in-out;\n}\n.filer-dropzone .dz-preview.dz-error .dz-error-message {\n display: block;\n}\n.filer-dropzone .dz-preview.dz-error:hover .dz-error-message {\n pointer-events: auto;\n opacity: 1;\n}\n.filer-dropzone .dz-preview .dz-error-message {\n display: block;\n display: none;\n position: absolute;\n top: 130px;\n left: -10px;\n z-index: 1000;\n color: $white;\n font-size: 13px;\n width: 140px;\n padding: 0.5em 1.2em;\n border-radius: 8px;\n pointer-events: none;\n opacity: 0;\n background: #be2626;\n background: linear-gradient(to bottom, #be2626, #a92222);\n transition: opacity 0.3s ease;\n}\n.filer-dropzone .dz-preview .dz-error-message:after {\n content: \"\";\n position: absolute;\n top: -6px;\n left: 64px;\n width: 0;\n height: 0;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #be2626;\n border-left: 6px solid transparent;\n}\n"]}
\ No newline at end of file
diff --git a/filer/static/filer/css/maps/admin_filer.fa.icons.css.map b/filer/static/filer/css/maps/admin_filer.fa.icons.css.map
new file mode 100644
index 000000000..6d9e865fe
--- /dev/null
+++ b/filer/static/filer/css/maps/admin_filer.fa.icons.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["admin_filer.fa.icons.css","libs/_font-awesome.min.scss"],"names":[],"mappings":"AAAA;;;ECAA,CAGG,WAAA,yBAAA,CAAA,mDAAA,CAAA,4WAAA,CAAA,kBAAA,CAAA,iBAAA,CAAA,IAAA,oBAAA,CAAA,4CAAA,CAAA,iBAAA,CAAA,mBAAA,CAAA,kCAAA,CAAA,iCAAA,CAAA,OAAA,sBAAA,CAAA,iBAAA,CAAA,mBAAA,CAAA,OAAA,aAAA,CAAA,OAAA,aAAA,CAAA,OAAA,aAAA,CAAA,OAAA,aAAA,CAAA,OAAA,kBAAA,CAAA,iBAAA,CAAA,OAAA,cAAA,CAAA,wBAAA,CAAA,oBAAA,CAAA,UAAA,iBAAA,CAAA,OAAA,iBAAA,CAAA,kBAAA,CAAA,kBAAA,CAAA,eAAA,CAAA,iBAAA,CAAA,aAAA,kBAAA,CAAA,WAAA,wBAAA,CAAA,uBAAA,CAAA,kBAAA,CAAA,cAAA,UAAA,CAAA,eAAA,WAAA,CAAA,iBAAA,iBAAA,CAAA,kBAAA,gBAAA,CAAA,YAAA,WAAA,CAAA,WAAA,UAAA,CAAA,cAAA,iBAAA,CAAA,eAAA,gBAAA,CAAA,SAAA,oCAAA,CAAA,UAAA,sCAAA,CAAA,mBAAA,GAAA,sBAAA,CAAA,KAAA,wBAAA,CAAA,CAAA,cAAA,+DAAA,CAAA,uBAAA,CAAA,eAAA,+DAAA,CAAA,wBAAA,CAAA,eAAA,+DAAA,CAAA,wBAAA,CAAA,oBAAA,yEAAA,CAAA,sBAAA,CAAA,kBAAA,yEAAA,CAAA,sBAAA,CAAA,gHAAA,WAAA,CAAA,UAAA,iBAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,UAAA,CAAA,eAAA,CAAA,qBAAA,CAAA,0BAAA,iBAAA,CAAA,MAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,aAAA,mBAAA,CAAA,aAAA,aAAA,CAAA,YAAA,UAAA,CAAA,iBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,cAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,oDAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,0CAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,qCAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,uDAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,2CAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,eAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,yCAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,8BAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,mDAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,4CAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,iCAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,0CAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,8BAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,kCAAA,WAAA,CAAA,iCAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,mCAAA,WAAA,CAAA,mCAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,oCAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,sDAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,8BAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,oCAAA,WAAA,CAAA,0CAAA,WAAA,CAAA,uCAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,uCAAA,WAAA,CAAA,kCAAA,WAAA,CAAA,2CAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,iCAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sCAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,8BAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,0CAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,uCAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,+CAAA,WAAA,CAAA,4EAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,0CAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,gCAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,gCAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,sDAAA,WAAA,CAAA,kDAAA,WAAA,CAAA,wDAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,eAAA,WAAA,CAAA,iCAAA,WAAA,CAAA,gCAAA,WAAA,CAAA,4DAAA,WAAA,CAAA,kDAAA,WAAA,CAAA,8BAAA,WAAA,CAAA,kCAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,sCAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,cAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,gCAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,sDAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,uCAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,6DAAA,WAAA,CAAA,kDAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,8BAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,qCAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,0EAAA,WAAA,CAAA,gDAAA,WAAA,CAAA,gDAAA,WAAA,CAAA,gDAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,wGAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,+BAAA,WAAA,CAAA,gCAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,2EAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,cAAA,WAAA,CAAA,oCAAA,WAAA,CAAA,uCAAA,WAAA,CAAA,2CAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,6CAAA,WAAA,CAAA,eAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,cAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,cAAA,WAAA,CAAA,mDAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,gBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,2CAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,gCAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,sCAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,6CAAA,WAAA,CAAA,uDAAA,WAAA,CAAA,6CAAA,WAAA,CAAA,gDAAA,WAAA,CAAA,8CAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,kDAAA,WAAA,CAAA,iDAAA,WAAA,CAAA,gDAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,8CAAA,WAAA,CAAA,+CAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,0BAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,cAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,yBAAA,WAAA,CAAA,gCAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,uBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,6BAAA,WAAA,CAAA,oCAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,kBAAA,WAAA,CAAA,2BAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,4BAAA,WAAA,CAAA,oBAAA,WAAA,CAAA,mBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,eAAA,WAAA,CAAA,sBAAA,WAAA,CAAA,wBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,iBAAA,WAAA,CAAA,qBAAA,WAAA,CAAA,qBAAA,WAAA","file":"../admin_filer.fa.icons.css","sourcesContent":["/*!\n * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:\"FontAwesome\";src:url(\"../fonts/fontawesome-webfont.eot?v=4.4.0\");src:url(\"../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0\") format(\"embedded-opentype\"),url(\"../fonts/fontawesome-webfont.woff2?v=4.4.0\") format(\"woff2\"),url(\"../fonts/fontawesome-webfont.woff?v=4.4.0\") format(\"woff\"),url(\"../fonts/fontawesome-webfont.ttf?v=4.4.0\") format(\"truetype\"),url(\"../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular\") format(\"svg\");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\"}.fa-music:before{content:\"\"}.fa-search:before{content:\"\"}.fa-envelope-o:before{content:\"\"}.fa-heart:before{content:\"\"}.fa-star:before{content:\"\"}.fa-star-o:before{content:\"\"}.fa-user:before{content:\"\"}.fa-film:before{content:\"\"}.fa-th-large:before{content:\"\"}.fa-th:before{content:\"\"}.fa-th-list:before{content:\"\"}.fa-check:before{content:\"\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\"}.fa-search-plus:before{content:\"\"}.fa-search-minus:before{content:\"\"}.fa-power-off:before{content:\"\"}.fa-signal:before{content:\"\"}.fa-gear:before,.fa-cog:before{content:\"\"}.fa-trash-o:before{content:\"\"}.fa-home:before{content:\"\"}.fa-file-o:before{content:\"\"}.fa-clock-o:before{content:\"\"}.fa-road:before{content:\"\"}.fa-download:before{content:\"\"}.fa-arrow-circle-o-down:before{content:\"\"}.fa-arrow-circle-o-up:before{content:\"\"}.fa-inbox:before{content:\"\"}.fa-play-circle-o:before{content:\"\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\"}.fa-refresh:before{content:\"\"}.fa-list-alt:before{content:\"\"}.fa-lock:before{content:\"\"}.fa-flag:before{content:\"\"}.fa-headphones:before{content:\"\"}.fa-volume-off:before{content:\"\"}.fa-volume-down:before{content:\"\"}.fa-volume-up:before{content:\"\"}.fa-qrcode:before{content:\"\"}.fa-barcode:before{content:\"\"}.fa-tag:before{content:\"\"}.fa-tags:before{content:\"\"}.fa-book:before{content:\"\"}.fa-bookmark:before{content:\"\"}.fa-print:before{content:\"\"}.fa-camera:before{content:\"\"}.fa-font:before{content:\"\"}.fa-bold:before{content:\"\"}.fa-italic:before{content:\"\"}.fa-text-height:before{content:\"\"}.fa-text-width:before{content:\"\"}.fa-align-left:before{content:\"\"}.fa-align-center:before{content:\"\"}.fa-align-right:before{content:\"\"}.fa-align-justify:before{content:\"\"}.fa-list:before{content:\"\"}.fa-dedent:before,.fa-outdent:before{content:\"\"}.fa-indent:before{content:\"\"}.fa-video-camera:before{content:\"\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\"}.fa-pencil:before{content:\"\"}.fa-map-marker:before{content:\"\"}.fa-adjust:before{content:\"\"}.fa-tint:before{content:\"\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\"}.fa-share-square-o:before{content:\"\"}.fa-check-square-o:before{content:\"\"}.fa-arrows:before{content:\"\"}.fa-step-backward:before{content:\"\"}.fa-fast-backward:before{content:\"\"}.fa-backward:before{content:\"\"}.fa-play:before{content:\"\"}.fa-pause:before{content:\"\"}.fa-stop:before{content:\"\"}.fa-forward:before{content:\"\"}.fa-fast-forward:before{content:\"\"}.fa-step-forward:before{content:\"\"}.fa-eject:before{content:\"\"}.fa-chevron-left:before{content:\"\"}.fa-chevron-right:before{content:\"\"}.fa-plus-circle:before{content:\"\"}.fa-minus-circle:before{content:\"\"}.fa-times-circle:before{content:\"\"}.fa-check-circle:before{content:\"\"}.fa-question-circle:before{content:\"\"}.fa-info-circle:before{content:\"\"}.fa-crosshairs:before{content:\"\"}.fa-times-circle-o:before{content:\"\"}.fa-check-circle-o:before{content:\"\"}.fa-ban:before{content:\"\"}.fa-arrow-left:before{content:\"\"}.fa-arrow-right:before{content:\"\"}.fa-arrow-up:before{content:\"\"}.fa-arrow-down:before{content:\"\"}.fa-mail-forward:before,.fa-share:before{content:\"\"}.fa-expand:before{content:\"\"}.fa-compress:before{content:\"\"}.fa-plus:before{content:\"\"}.fa-minus:before{content:\"\"}.fa-asterisk:before{content:\"\"}.fa-exclamation-circle:before{content:\"\"}.fa-gift:before{content:\"\"}.fa-leaf:before{content:\"\"}.fa-fire:before{content:\"\"}.fa-eye:before{content:\"\"}.fa-eye-slash:before{content:\"\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\"}.fa-plane:before{content:\"\"}.fa-calendar:before{content:\"\"}.fa-random:before{content:\"\"}.fa-comment:before{content:\"\"}.fa-magnet:before{content:\"\"}.fa-chevron-up:before{content:\"\"}.fa-chevron-down:before{content:\"\"}.fa-retweet:before{content:\"\"}.fa-shopping-cart:before{content:\"\"}.fa-folder:before{content:\"\"}.fa-folder-open:before{content:\"\"}.fa-arrows-v:before{content:\"\"}.fa-arrows-h:before{content:\"\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\"}.fa-twitter-square:before{content:\"\"}.fa-facebook-square:before{content:\"\"}.fa-camera-retro:before{content:\"\"}.fa-key:before{content:\"\"}.fa-gears:before,.fa-cogs:before{content:\"\"}.fa-comments:before{content:\"\"}.fa-thumbs-o-up:before{content:\"\"}.fa-thumbs-o-down:before{content:\"\"}.fa-star-half:before{content:\"\"}.fa-heart-o:before{content:\"\"}.fa-sign-out:before{content:\"\"}.fa-linkedin-square:before{content:\"\"}.fa-thumb-tack:before{content:\"\"}.fa-external-link:before{content:\"\"}.fa-sign-in:before{content:\"\"}.fa-trophy:before{content:\"\"}.fa-github-square:before{content:\"\"}.fa-upload:before{content:\"\"}.fa-lemon-o:before{content:\"\"}.fa-phone:before{content:\"\"}.fa-square-o:before{content:\"\"}.fa-bookmark-o:before{content:\"\"}.fa-phone-square:before{content:\"\"}.fa-twitter:before{content:\"\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\"}.fa-github:before{content:\"\"}.fa-unlock:before{content:\"\"}.fa-credit-card:before{content:\"\"}.fa-feed:before,.fa-rss:before{content:\"\"}.fa-hdd-o:before{content:\"\"}.fa-bullhorn:before{content:\"\"}.fa-bell:before{content:\"\"}.fa-certificate:before{content:\"\"}.fa-hand-o-right:before{content:\"\"}.fa-hand-o-left:before{content:\"\"}.fa-hand-o-up:before{content:\"\"}.fa-hand-o-down:before{content:\"\"}.fa-arrow-circle-left:before{content:\"\"}.fa-arrow-circle-right:before{content:\"\"}.fa-arrow-circle-up:before{content:\"\"}.fa-arrow-circle-down:before{content:\"\"}.fa-globe:before{content:\"\"}.fa-wrench:before{content:\"\"}.fa-tasks:before{content:\"\"}.fa-filter:before{content:\"\"}.fa-briefcase:before{content:\"\"}.fa-arrows-alt:before{content:\"\"}.fa-group:before,.fa-users:before{content:\"\"}.fa-chain:before,.fa-link:before{content:\"\"}.fa-cloud:before{content:\"\"}.fa-flask:before{content:\"\"}.fa-cut:before,.fa-scissors:before{content:\"\"}.fa-copy:before,.fa-files-o:before{content:\"\"}.fa-paperclip:before{content:\"\"}.fa-save:before,.fa-floppy-o:before{content:\"\"}.fa-square:before{content:\"\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\"}.fa-list-ul:before{content:\"\"}.fa-list-ol:before{content:\"\"}.fa-strikethrough:before{content:\"\"}.fa-underline:before{content:\"\"}.fa-table:before{content:\"\"}.fa-magic:before{content:\"\"}.fa-truck:before{content:\"\"}.fa-pinterest:before{content:\"\"}.fa-pinterest-square:before{content:\"\"}.fa-google-plus-square:before{content:\"\"}.fa-google-plus:before{content:\"\"}.fa-money:before{content:\"\"}.fa-caret-down:before{content:\"\"}.fa-caret-up:before{content:\"\"}.fa-caret-left:before{content:\"\"}.fa-caret-right:before{content:\"\"}.fa-columns:before{content:\"\"}.fa-unsorted:before,.fa-sort:before{content:\"\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\"}.fa-envelope:before{content:\"\"}.fa-linkedin:before{content:\"\"}.fa-rotate-left:before,.fa-undo:before{content:\"\"}.fa-legal:before,.fa-gavel:before{content:\"\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\"}.fa-comment-o:before{content:\"\"}.fa-comments-o:before{content:\"\"}.fa-flash:before,.fa-bolt:before{content:\"\"}.fa-sitemap:before{content:\"\"}.fa-umbrella:before{content:\"\"}.fa-paste:before,.fa-clipboard:before{content:\"\"}.fa-lightbulb-o:before{content:\"\"}.fa-exchange:before{content:\"\"}.fa-cloud-download:before{content:\"\"}.fa-cloud-upload:before{content:\"\"}.fa-user-md:before{content:\"\"}.fa-stethoscope:before{content:\"\"}.fa-suitcase:before{content:\"\"}.fa-bell-o:before{content:\"\"}.fa-coffee:before{content:\"\"}.fa-cutlery:before{content:\"\"}.fa-file-text-o:before{content:\"\"}.fa-building-o:before{content:\"\"}.fa-hospital-o:before{content:\"\"}.fa-ambulance:before{content:\"\"}.fa-medkit:before{content:\"\"}.fa-fighter-jet:before{content:\"\"}.fa-beer:before{content:\"\"}.fa-h-square:before{content:\"\"}.fa-plus-square:before{content:\"\"}.fa-angle-double-left:before{content:\"\"}.fa-angle-double-right:before{content:\"\"}.fa-angle-double-up:before{content:\"\"}.fa-angle-double-down:before{content:\"\"}.fa-angle-left:before{content:\"\"}.fa-angle-right:before{content:\"\"}.fa-angle-up:before{content:\"\"}.fa-angle-down:before{content:\"\"}.fa-desktop:before{content:\"\"}.fa-laptop:before{content:\"\"}.fa-tablet:before{content:\"\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\"}.fa-circle-o:before{content:\"\"}.fa-quote-left:before{content:\"\"}.fa-quote-right:before{content:\"\"}.fa-spinner:before{content:\"\"}.fa-circle:before{content:\"\"}.fa-mail-reply:before,.fa-reply:before{content:\"\"}.fa-github-alt:before{content:\"\"}.fa-folder-o:before{content:\"\"}.fa-folder-open-o:before{content:\"\"}.fa-smile-o:before{content:\"\"}.fa-frown-o:before{content:\"\"}.fa-meh-o:before{content:\"\"}.fa-gamepad:before{content:\"\"}.fa-keyboard-o:before{content:\"\"}.fa-flag-o:before{content:\"\"}.fa-flag-checkered:before{content:\"\"}.fa-terminal:before{content:\"\"}.fa-code:before{content:\"\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\"}.fa-location-arrow:before{content:\"\"}.fa-crop:before{content:\"\"}.fa-code-fork:before{content:\"\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\"}.fa-question:before{content:\"\"}.fa-info:before{content:\"\"}.fa-exclamation:before{content:\"\"}.fa-superscript:before{content:\"\"}.fa-subscript:before{content:\"\"}.fa-eraser:before{content:\"\"}.fa-puzzle-piece:before{content:\"\"}.fa-microphone:before{content:\"\"}.fa-microphone-slash:before{content:\"\"}.fa-shield:before{content:\"\"}.fa-calendar-o:before{content:\"\"}.fa-fire-extinguisher:before{content:\"\"}.fa-rocket:before{content:\"\"}.fa-maxcdn:before{content:\"\"}.fa-chevron-circle-left:before{content:\"\"}.fa-chevron-circle-right:before{content:\"\"}.fa-chevron-circle-up:before{content:\"\"}.fa-chevron-circle-down:before{content:\"\"}.fa-html5:before{content:\"\"}.fa-css3:before{content:\"\"}.fa-anchor:before{content:\"\"}.fa-unlock-alt:before{content:\"\"}.fa-bullseye:before{content:\"\"}.fa-ellipsis-h:before{content:\"\"}.fa-ellipsis-v:before{content:\"\"}.fa-rss-square:before{content:\"\"}.fa-play-circle:before{content:\"\"}.fa-ticket:before{content:\"\"}.fa-minus-square:before{content:\"\"}.fa-minus-square-o:before{content:\"\"}.fa-level-up:before{content:\"\"}.fa-level-down:before{content:\"\"}.fa-check-square:before{content:\"\"}.fa-pencil-square:before{content:\"\"}.fa-external-link-square:before{content:\"\"}.fa-share-square:before{content:\"\"}.fa-compass:before{content:\"\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\"}.fa-euro:before,.fa-eur:before{content:\"\"}.fa-gbp:before{content:\"\"}.fa-dollar:before,.fa-usd:before{content:\"\"}.fa-rupee:before,.fa-inr:before{content:\"\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\"}.fa-won:before,.fa-krw:before{content:\"\"}.fa-bitcoin:before,.fa-btc:before{content:\"\"}.fa-file:before{content:\"\"}.fa-file-text:before{content:\"\"}.fa-sort-alpha-asc:before{content:\"\"}.fa-sort-alpha-desc:before{content:\"\"}.fa-sort-amount-asc:before{content:\"\"}.fa-sort-amount-desc:before{content:\"\"}.fa-sort-numeric-asc:before{content:\"\"}.fa-sort-numeric-desc:before{content:\"\"}.fa-thumbs-up:before{content:\"\"}.fa-thumbs-down:before{content:\"\"}.fa-youtube-square:before{content:\"\"}.fa-youtube:before{content:\"\"}.fa-xing:before{content:\"\"}.fa-xing-square:before{content:\"\"}.fa-youtube-play:before{content:\"\"}.fa-dropbox:before{content:\"\"}.fa-stack-overflow:before{content:\"\"}.fa-instagram:before{content:\"\"}.fa-flickr:before{content:\"\"}.fa-adn:before{content:\"\"}.fa-bitbucket:before{content:\"\"}.fa-bitbucket-square:before{content:\"\"}.fa-tumblr:before{content:\"\"}.fa-tumblr-square:before{content:\"\"}.fa-long-arrow-down:before{content:\"\"}.fa-long-arrow-up:before{content:\"\"}.fa-long-arrow-left:before{content:\"\"}.fa-long-arrow-right:before{content:\"\"}.fa-apple:before{content:\"\"}.fa-windows:before{content:\"\"}.fa-android:before{content:\"\"}.fa-linux:before{content:\"\"}.fa-dribbble:before{content:\"\"}.fa-skype:before{content:\"\"}.fa-foursquare:before{content:\"\"}.fa-trello:before{content:\"\"}.fa-female:before{content:\"\"}.fa-male:before{content:\"\"}.fa-gittip:before,.fa-gratipay:before{content:\"\"}.fa-sun-o:before{content:\"\"}.fa-moon-o:before{content:\"\"}.fa-archive:before{content:\"\"}.fa-bug:before{content:\"\"}.fa-vk:before{content:\"\"}.fa-weibo:before{content:\"\"}.fa-renren:before{content:\"\"}.fa-pagelines:before{content:\"\"}.fa-stack-exchange:before{content:\"\"}.fa-arrow-circle-o-right:before{content:\"\"}.fa-arrow-circle-o-left:before{content:\"\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\"}.fa-dot-circle-o:before{content:\"\"}.fa-wheelchair:before{content:\"\"}.fa-vimeo-square:before{content:\"\"}.fa-turkish-lira:before,.fa-try:before{content:\"\"}.fa-plus-square-o:before{content:\"\"}.fa-space-shuttle:before{content:\"\"}.fa-slack:before{content:\"\"}.fa-envelope-square:before{content:\"\"}.fa-wordpress:before{content:\"\"}.fa-openid:before{content:\"\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\"}.fa-yahoo:before{content:\"\"}.fa-google:before{content:\"\"}.fa-reddit:before{content:\"\"}.fa-reddit-square:before{content:\"\"}.fa-stumbleupon-circle:before{content:\"\"}.fa-stumbleupon:before{content:\"\"}.fa-delicious:before{content:\"\"}.fa-digg:before{content:\"\"}.fa-pied-piper:before{content:\"\"}.fa-pied-piper-alt:before{content:\"\"}.fa-drupal:before{content:\"\"}.fa-joomla:before{content:\"\"}.fa-language:before{content:\"\"}.fa-fax:before{content:\"\"}.fa-building:before{content:\"\"}.fa-child:before{content:\"\"}.fa-paw:before{content:\"\"}.fa-spoon:before{content:\"\"}.fa-cube:before{content:\"\"}.fa-cubes:before{content:\"\"}.fa-behance:before{content:\"\"}.fa-behance-square:before{content:\"\"}.fa-steam:before{content:\"\"}.fa-steam-square:before{content:\"\"}.fa-recycle:before{content:\"\"}.fa-automobile:before,.fa-car:before{content:\"\"}.fa-cab:before,.fa-taxi:before{content:\"\"}.fa-tree:before{content:\"\"}.fa-spotify:before{content:\"\"}.fa-deviantart:before{content:\"\"}.fa-soundcloud:before{content:\"\"}.fa-database:before{content:\"\"}.fa-file-pdf-o:before{content:\"\"}.fa-file-word-o:before{content:\"\"}.fa-file-excel-o:before{content:\"\"}.fa-file-powerpoint-o:before{content:\"\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\"}.fa-file-code-o:before{content:\"\"}.fa-vine:before{content:\"\"}.fa-codepen:before{content:\"\"}.fa-jsfiddle:before{content:\"\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\"}.fa-circle-o-notch:before{content:\"\"}.fa-ra:before,.fa-rebel:before{content:\"\"}.fa-ge:before,.fa-empire:before{content:\"\"}.fa-git-square:before{content:\"\"}.fa-git:before{content:\"\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\"}.fa-tencent-weibo:before{content:\"\"}.fa-qq:before{content:\"\"}.fa-wechat:before,.fa-weixin:before{content:\"\"}.fa-send:before,.fa-paper-plane:before{content:\"\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\"}.fa-history:before{content:\"\"}.fa-circle-thin:before{content:\"\"}.fa-header:before{content:\"\"}.fa-paragraph:before{content:\"\"}.fa-sliders:before{content:\"\"}.fa-share-alt:before{content:\"\"}.fa-share-alt-square:before{content:\"\"}.fa-bomb:before{content:\"\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\"}.fa-tty:before{content:\"\"}.fa-binoculars:before{content:\"\"}.fa-plug:before{content:\"\"}.fa-slideshare:before{content:\"\"}.fa-twitch:before{content:\"\"}.fa-yelp:before{content:\"\"}.fa-newspaper-o:before{content:\"\"}.fa-wifi:before{content:\"\"}.fa-calculator:before{content:\"\"}.fa-paypal:before{content:\"\"}.fa-google-wallet:before{content:\"\"}.fa-cc-visa:before{content:\"\"}.fa-cc-mastercard:before{content:\"\"}.fa-cc-discover:before{content:\"\"}.fa-cc-amex:before{content:\"\"}.fa-cc-paypal:before{content:\"\"}.fa-cc-stripe:before{content:\"\"}.fa-bell-slash:before{content:\"\"}.fa-bell-slash-o:before{content:\"\"}.fa-trash:before{content:\"\"}.fa-copyright:before{content:\"\"}.fa-at:before{content:\"\"}.fa-eyedropper:before{content:\"\"}.fa-paint-brush:before{content:\"\"}.fa-birthday-cake:before{content:\"\"}.fa-area-chart:before{content:\"\"}.fa-pie-chart:before{content:\"\"}.fa-line-chart:before{content:\"\"}.fa-lastfm:before{content:\"\"}.fa-lastfm-square:before{content:\"\"}.fa-toggle-off:before{content:\"\"}.fa-toggle-on:before{content:\"\"}.fa-bicycle:before{content:\"\"}.fa-bus:before{content:\"\"}.fa-ioxhost:before{content:\"\"}.fa-angellist:before{content:\"\"}.fa-cc:before{content:\"\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\"}.fa-meanpath:before{content:\"\"}.fa-buysellads:before{content:\"\"}.fa-connectdevelop:before{content:\"\"}.fa-dashcube:before{content:\"\"}.fa-forumbee:before{content:\"\"}.fa-leanpub:before{content:\"\"}.fa-sellsy:before{content:\"\"}.fa-shirtsinbulk:before{content:\"\"}.fa-simplybuilt:before{content:\"\"}.fa-skyatlas:before{content:\"\"}.fa-cart-plus:before{content:\"\"}.fa-cart-arrow-down:before{content:\"\"}.fa-diamond:before{content:\"\"}.fa-ship:before{content:\"\"}.fa-user-secret:before{content:\"\"}.fa-motorcycle:before{content:\"\"}.fa-street-view:before{content:\"\"}.fa-heartbeat:before{content:\"\"}.fa-venus:before{content:\"\"}.fa-mars:before{content:\"\"}.fa-mercury:before{content:\"\"}.fa-intersex:before,.fa-transgender:before{content:\"\"}.fa-transgender-alt:before{content:\"\"}.fa-venus-double:before{content:\"\"}.fa-mars-double:before{content:\"\"}.fa-venus-mars:before{content:\"\"}.fa-mars-stroke:before{content:\"\"}.fa-mars-stroke-v:before{content:\"\"}.fa-mars-stroke-h:before{content:\"\"}.fa-neuter:before{content:\"\"}.fa-genderless:before{content:\"\"}.fa-facebook-official:before{content:\"\"}.fa-pinterest-p:before{content:\"\"}.fa-whatsapp:before{content:\"\"}.fa-server:before{content:\"\"}.fa-user-plus:before{content:\"\"}.fa-user-times:before{content:\"\"}.fa-hotel:before,.fa-bed:before{content:\"\"}.fa-viacoin:before{content:\"\"}.fa-train:before{content:\"\"}.fa-subway:before{content:\"\"}.fa-medium:before{content:\"\"}.fa-yc:before,.fa-y-combinator:before{content:\"\"}.fa-optin-monster:before{content:\"\"}.fa-opencart:before{content:\"\"}.fa-expeditedssl:before{content:\"\"}.fa-battery-4:before,.fa-battery-full:before{content:\"\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\"}.fa-mouse-pointer:before{content:\"\"}.fa-i-cursor:before{content:\"\"}.fa-object-group:before{content:\"\"}.fa-object-ungroup:before{content:\"\"}.fa-sticky-note:before{content:\"\"}.fa-sticky-note-o:before{content:\"\"}.fa-cc-jcb:before{content:\"\"}.fa-cc-diners-club:before{content:\"\"}.fa-clone:before{content:\"\"}.fa-balance-scale:before{content:\"\"}.fa-hourglass-o:before{content:\"\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\"}.fa-hourglass:before{content:\"\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\"}.fa-hand-scissors-o:before{content:\"\"}.fa-hand-lizard-o:before{content:\"\"}.fa-hand-spock-o:before{content:\"\"}.fa-hand-pointer-o:before{content:\"\"}.fa-hand-peace-o:before{content:\"\"}.fa-trademark:before{content:\"\"}.fa-registered:before{content:\"\"}.fa-creative-commons:before{content:\"\"}.fa-gg:before{content:\"\"}.fa-gg-circle:before{content:\"\"}.fa-tripadvisor:before{content:\"\"}.fa-odnoklassniki:before{content:\"\"}.fa-odnoklassniki-square:before{content:\"\"}.fa-get-pocket:before{content:\"\"}.fa-wikipedia-w:before{content:\"\"}.fa-safari:before{content:\"\"}.fa-chrome:before{content:\"\"}.fa-firefox:before{content:\"\"}.fa-opera:before{content:\"\"}.fa-internet-explorer:before{content:\"\"}.fa-tv:before,.fa-television:before{content:\"\"}.fa-contao:before{content:\"\"}.fa-500px:before{content:\"\"}.fa-amazon:before{content:\"\"}.fa-calendar-plus-o:before{content:\"\"}.fa-calendar-minus-o:before{content:\"\"}.fa-calendar-times-o:before{content:\"\"}.fa-calendar-check-o:before{content:\"\"}.fa-industry:before{content:\"\"}.fa-map-pin:before{content:\"\"}.fa-map-signs:before{content:\"\"}.fa-map-o:before{content:\"\"}.fa-map:before{content:\"\"}.fa-commenting:before{content:\"\"}.fa-commenting-o:before{content:\"\"}.fa-houzz:before{content:\"\"}.fa-vimeo:before{content:\"\"}.fa-black-tie:before{content:\"\"}.fa-fonticons:before{content:\"\"}","/*!\n * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:\"\\f000\"}.fa-music:before{content:\"\\f001\"}.fa-search:before{content:\"\\f002\"}.fa-envelope-o:before{content:\"\\f003\"}.fa-heart:before{content:\"\\f004\"}.fa-star:before{content:\"\\f005\"}.fa-star-o:before{content:\"\\f006\"}.fa-user:before{content:\"\\f007\"}.fa-film:before{content:\"\\f008\"}.fa-th-large:before{content:\"\\f009\"}.fa-th:before{content:\"\\f00a\"}.fa-th-list:before{content:\"\\f00b\"}.fa-check:before{content:\"\\f00c\"}.fa-remove:before,.fa-close:before,.fa-times:before{content:\"\\f00d\"}.fa-search-plus:before{content:\"\\f00e\"}.fa-search-minus:before{content:\"\\f010\"}.fa-power-off:before{content:\"\\f011\"}.fa-signal:before{content:\"\\f012\"}.fa-gear:before,.fa-cog:before{content:\"\\f013\"}.fa-trash-o:before{content:\"\\f014\"}.fa-home:before{content:\"\\f015\"}.fa-file-o:before{content:\"\\f016\"}.fa-clock-o:before{content:\"\\f017\"}.fa-road:before{content:\"\\f018\"}.fa-download:before{content:\"\\f019\"}.fa-arrow-circle-o-down:before{content:\"\\f01a\"}.fa-arrow-circle-o-up:before{content:\"\\f01b\"}.fa-inbox:before{content:\"\\f01c\"}.fa-play-circle-o:before{content:\"\\f01d\"}.fa-rotate-right:before,.fa-repeat:before{content:\"\\f01e\"}.fa-refresh:before{content:\"\\f021\"}.fa-list-alt:before{content:\"\\f022\"}.fa-lock:before{content:\"\\f023\"}.fa-flag:before{content:\"\\f024\"}.fa-headphones:before{content:\"\\f025\"}.fa-volume-off:before{content:\"\\f026\"}.fa-volume-down:before{content:\"\\f027\"}.fa-volume-up:before{content:\"\\f028\"}.fa-qrcode:before{content:\"\\f029\"}.fa-barcode:before{content:\"\\f02a\"}.fa-tag:before{content:\"\\f02b\"}.fa-tags:before{content:\"\\f02c\"}.fa-book:before{content:\"\\f02d\"}.fa-bookmark:before{content:\"\\f02e\"}.fa-print:before{content:\"\\f02f\"}.fa-camera:before{content:\"\\f030\"}.fa-font:before{content:\"\\f031\"}.fa-bold:before{content:\"\\f032\"}.fa-italic:before{content:\"\\f033\"}.fa-text-height:before{content:\"\\f034\"}.fa-text-width:before{content:\"\\f035\"}.fa-align-left:before{content:\"\\f036\"}.fa-align-center:before{content:\"\\f037\"}.fa-align-right:before{content:\"\\f038\"}.fa-align-justify:before{content:\"\\f039\"}.fa-list:before{content:\"\\f03a\"}.fa-dedent:before,.fa-outdent:before{content:\"\\f03b\"}.fa-indent:before{content:\"\\f03c\"}.fa-video-camera:before{content:\"\\f03d\"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:\"\\f03e\"}.fa-pencil:before{content:\"\\f040\"}.fa-map-marker:before{content:\"\\f041\"}.fa-adjust:before{content:\"\\f042\"}.fa-tint:before{content:\"\\f043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\f044\"}.fa-share-square-o:before{content:\"\\f045\"}.fa-check-square-o:before{content:\"\\f046\"}.fa-arrows:before{content:\"\\f047\"}.fa-step-backward:before{content:\"\\f048\"}.fa-fast-backward:before{content:\"\\f049\"}.fa-backward:before{content:\"\\f04a\"}.fa-play:before{content:\"\\f04b\"}.fa-pause:before{content:\"\\f04c\"}.fa-stop:before{content:\"\\f04d\"}.fa-forward:before{content:\"\\f04e\"}.fa-fast-forward:before{content:\"\\f050\"}.fa-step-forward:before{content:\"\\f051\"}.fa-eject:before{content:\"\\f052\"}.fa-chevron-left:before{content:\"\\f053\"}.fa-chevron-right:before{content:\"\\f054\"}.fa-plus-circle:before{content:\"\\f055\"}.fa-minus-circle:before{content:\"\\f056\"}.fa-times-circle:before{content:\"\\f057\"}.fa-check-circle:before{content:\"\\f058\"}.fa-question-circle:before{content:\"\\f059\"}.fa-info-circle:before{content:\"\\f05a\"}.fa-crosshairs:before{content:\"\\f05b\"}.fa-times-circle-o:before{content:\"\\f05c\"}.fa-check-circle-o:before{content:\"\\f05d\"}.fa-ban:before{content:\"\\f05e\"}.fa-arrow-left:before{content:\"\\f060\"}.fa-arrow-right:before{content:\"\\f061\"}.fa-arrow-up:before{content:\"\\f062\"}.fa-arrow-down:before{content:\"\\f063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\f064\"}.fa-expand:before{content:\"\\f065\"}.fa-compress:before{content:\"\\f066\"}.fa-plus:before{content:\"\\f067\"}.fa-minus:before{content:\"\\f068\"}.fa-asterisk:before{content:\"\\f069\"}.fa-exclamation-circle:before{content:\"\\f06a\"}.fa-gift:before{content:\"\\f06b\"}.fa-leaf:before{content:\"\\f06c\"}.fa-fire:before{content:\"\\f06d\"}.fa-eye:before{content:\"\\f06e\"}.fa-eye-slash:before{content:\"\\f070\"}.fa-warning:before,.fa-exclamation-triangle:before{content:\"\\f071\"}.fa-plane:before{content:\"\\f072\"}.fa-calendar:before{content:\"\\f073\"}.fa-random:before{content:\"\\f074\"}.fa-comment:before{content:\"\\f075\"}.fa-magnet:before{content:\"\\f076\"}.fa-chevron-up:before{content:\"\\f077\"}.fa-chevron-down:before{content:\"\\f078\"}.fa-retweet:before{content:\"\\f079\"}.fa-shopping-cart:before{content:\"\\f07a\"}.fa-folder:before{content:\"\\f07b\"}.fa-folder-open:before{content:\"\\f07c\"}.fa-arrows-v:before{content:\"\\f07d\"}.fa-arrows-h:before{content:\"\\f07e\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\f080\"}.fa-twitter-square:before{content:\"\\f081\"}.fa-facebook-square:before{content:\"\\f082\"}.fa-camera-retro:before{content:\"\\f083\"}.fa-key:before{content:\"\\f084\"}.fa-gears:before,.fa-cogs:before{content:\"\\f085\"}.fa-comments:before{content:\"\\f086\"}.fa-thumbs-o-up:before{content:\"\\f087\"}.fa-thumbs-o-down:before{content:\"\\f088\"}.fa-star-half:before{content:\"\\f089\"}.fa-heart-o:before{content:\"\\f08a\"}.fa-sign-out:before{content:\"\\f08b\"}.fa-linkedin-square:before{content:\"\\f08c\"}.fa-thumb-tack:before{content:\"\\f08d\"}.fa-external-link:before{content:\"\\f08e\"}.fa-sign-in:before{content:\"\\f090\"}.fa-trophy:before{content:\"\\f091\"}.fa-github-square:before{content:\"\\f092\"}.fa-upload:before{content:\"\\f093\"}.fa-lemon-o:before{content:\"\\f094\"}.fa-phone:before{content:\"\\f095\"}.fa-square-o:before{content:\"\\f096\"}.fa-bookmark-o:before{content:\"\\f097\"}.fa-phone-square:before{content:\"\\f098\"}.fa-twitter:before{content:\"\\f099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\f09a\"}.fa-github:before{content:\"\\f09b\"}.fa-unlock:before{content:\"\\f09c\"}.fa-credit-card:before{content:\"\\f09d\"}.fa-feed:before,.fa-rss:before{content:\"\\f09e\"}.fa-hdd-o:before{content:\"\\f0a0\"}.fa-bullhorn:before{content:\"\\f0a1\"}.fa-bell:before{content:\"\\f0f3\"}.fa-certificate:before{content:\"\\f0a3\"}.fa-hand-o-right:before{content:\"\\f0a4\"}.fa-hand-o-left:before{content:\"\\f0a5\"}.fa-hand-o-up:before{content:\"\\f0a6\"}.fa-hand-o-down:before{content:\"\\f0a7\"}.fa-arrow-circle-left:before{content:\"\\f0a8\"}.fa-arrow-circle-right:before{content:\"\\f0a9\"}.fa-arrow-circle-up:before{content:\"\\f0aa\"}.fa-arrow-circle-down:before{content:\"\\f0ab\"}.fa-globe:before{content:\"\\f0ac\"}.fa-wrench:before{content:\"\\f0ad\"}.fa-tasks:before{content:\"\\f0ae\"}.fa-filter:before{content:\"\\f0b0\"}.fa-briefcase:before{content:\"\\f0b1\"}.fa-arrows-alt:before{content:\"\\f0b2\"}.fa-group:before,.fa-users:before{content:\"\\f0c0\"}.fa-chain:before,.fa-link:before{content:\"\\f0c1\"}.fa-cloud:before{content:\"\\f0c2\"}.fa-flask:before{content:\"\\f0c3\"}.fa-cut:before,.fa-scissors:before{content:\"\\f0c4\"}.fa-copy:before,.fa-files-o:before{content:\"\\f0c5\"}.fa-paperclip:before{content:\"\\f0c6\"}.fa-save:before,.fa-floppy-o:before{content:\"\\f0c7\"}.fa-square:before{content:\"\\f0c8\"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:\"\\f0c9\"}.fa-list-ul:before{content:\"\\f0ca\"}.fa-list-ol:before{content:\"\\f0cb\"}.fa-strikethrough:before{content:\"\\f0cc\"}.fa-underline:before{content:\"\\f0cd\"}.fa-table:before{content:\"\\f0ce\"}.fa-magic:before{content:\"\\f0d0\"}.fa-truck:before{content:\"\\f0d1\"}.fa-pinterest:before{content:\"\\f0d2\"}.fa-pinterest-square:before{content:\"\\f0d3\"}.fa-google-plus-square:before{content:\"\\f0d4\"}.fa-google-plus:before{content:\"\\f0d5\"}.fa-money:before{content:\"\\f0d6\"}.fa-caret-down:before{content:\"\\f0d7\"}.fa-caret-up:before{content:\"\\f0d8\"}.fa-caret-left:before{content:\"\\f0d9\"}.fa-caret-right:before{content:\"\\f0da\"}.fa-columns:before{content:\"\\f0db\"}.fa-unsorted:before,.fa-sort:before{content:\"\\f0dc\"}.fa-sort-down:before,.fa-sort-desc:before{content:\"\\f0dd\"}.fa-sort-up:before,.fa-sort-asc:before{content:\"\\f0de\"}.fa-envelope:before{content:\"\\f0e0\"}.fa-linkedin:before{content:\"\\f0e1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\f0e2\"}.fa-legal:before,.fa-gavel:before{content:\"\\f0e3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\f0e4\"}.fa-comment-o:before{content:\"\\f0e5\"}.fa-comments-o:before{content:\"\\f0e6\"}.fa-flash:before,.fa-bolt:before{content:\"\\f0e7\"}.fa-sitemap:before{content:\"\\f0e8\"}.fa-umbrella:before{content:\"\\f0e9\"}.fa-paste:before,.fa-clipboard:before{content:\"\\f0ea\"}.fa-lightbulb-o:before{content:\"\\f0eb\"}.fa-exchange:before{content:\"\\f0ec\"}.fa-cloud-download:before{content:\"\\f0ed\"}.fa-cloud-upload:before{content:\"\\f0ee\"}.fa-user-md:before{content:\"\\f0f0\"}.fa-stethoscope:before{content:\"\\f0f1\"}.fa-suitcase:before{content:\"\\f0f2\"}.fa-bell-o:before{content:\"\\f0a2\"}.fa-coffee:before{content:\"\\f0f4\"}.fa-cutlery:before{content:\"\\f0f5\"}.fa-file-text-o:before{content:\"\\f0f6\"}.fa-building-o:before{content:\"\\f0f7\"}.fa-hospital-o:before{content:\"\\f0f8\"}.fa-ambulance:before{content:\"\\f0f9\"}.fa-medkit:before{content:\"\\f0fa\"}.fa-fighter-jet:before{content:\"\\f0fb\"}.fa-beer:before{content:\"\\f0fc\"}.fa-h-square:before{content:\"\\f0fd\"}.fa-plus-square:before{content:\"\\f0fe\"}.fa-angle-double-left:before{content:\"\\f100\"}.fa-angle-double-right:before{content:\"\\f101\"}.fa-angle-double-up:before{content:\"\\f102\"}.fa-angle-double-down:before{content:\"\\f103\"}.fa-angle-left:before{content:\"\\f104\"}.fa-angle-right:before{content:\"\\f105\"}.fa-angle-up:before{content:\"\\f106\"}.fa-angle-down:before{content:\"\\f107\"}.fa-desktop:before{content:\"\\f108\"}.fa-laptop:before{content:\"\\f109\"}.fa-tablet:before{content:\"\\f10a\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\f10b\"}.fa-circle-o:before{content:\"\\f10c\"}.fa-quote-left:before{content:\"\\f10d\"}.fa-quote-right:before{content:\"\\f10e\"}.fa-spinner:before{content:\"\\f110\"}.fa-circle:before{content:\"\\f111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\f112\"}.fa-github-alt:before{content:\"\\f113\"}.fa-folder-o:before{content:\"\\f114\"}.fa-folder-open-o:before{content:\"\\f115\"}.fa-smile-o:before{content:\"\\f118\"}.fa-frown-o:before{content:\"\\f119\"}.fa-meh-o:before{content:\"\\f11a\"}.fa-gamepad:before{content:\"\\f11b\"}.fa-keyboard-o:before{content:\"\\f11c\"}.fa-flag-o:before{content:\"\\f11d\"}.fa-flag-checkered:before{content:\"\\f11e\"}.fa-terminal:before{content:\"\\f120\"}.fa-code:before{content:\"\\f121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\f122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\f123\"}.fa-location-arrow:before{content:\"\\f124\"}.fa-crop:before{content:\"\\f125\"}.fa-code-fork:before{content:\"\\f126\"}.fa-unlink:before,.fa-chain-broken:before{content:\"\\f127\"}.fa-question:before{content:\"\\f128\"}.fa-info:before{content:\"\\f129\"}.fa-exclamation:before{content:\"\\f12a\"}.fa-superscript:before{content:\"\\f12b\"}.fa-subscript:before{content:\"\\f12c\"}.fa-eraser:before{content:\"\\f12d\"}.fa-puzzle-piece:before{content:\"\\f12e\"}.fa-microphone:before{content:\"\\f130\"}.fa-microphone-slash:before{content:\"\\f131\"}.fa-shield:before{content:\"\\f132\"}.fa-calendar-o:before{content:\"\\f133\"}.fa-fire-extinguisher:before{content:\"\\f134\"}.fa-rocket:before{content:\"\\f135\"}.fa-maxcdn:before{content:\"\\f136\"}.fa-chevron-circle-left:before{content:\"\\f137\"}.fa-chevron-circle-right:before{content:\"\\f138\"}.fa-chevron-circle-up:before{content:\"\\f139\"}.fa-chevron-circle-down:before{content:\"\\f13a\"}.fa-html5:before{content:\"\\f13b\"}.fa-css3:before{content:\"\\f13c\"}.fa-anchor:before{content:\"\\f13d\"}.fa-unlock-alt:before{content:\"\\f13e\"}.fa-bullseye:before{content:\"\\f140\"}.fa-ellipsis-h:before{content:\"\\f141\"}.fa-ellipsis-v:before{content:\"\\f142\"}.fa-rss-square:before{content:\"\\f143\"}.fa-play-circle:before{content:\"\\f144\"}.fa-ticket:before{content:\"\\f145\"}.fa-minus-square:before{content:\"\\f146\"}.fa-minus-square-o:before{content:\"\\f147\"}.fa-level-up:before{content:\"\\f148\"}.fa-level-down:before{content:\"\\f149\"}.fa-check-square:before{content:\"\\f14a\"}.fa-pencil-square:before{content:\"\\f14b\"}.fa-external-link-square:before{content:\"\\f14c\"}.fa-share-square:before{content:\"\\f14d\"}.fa-compass:before{content:\"\\f14e\"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:\"\\f150\"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:\"\\f151\"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:\"\\f152\"}.fa-euro:before,.fa-eur:before{content:\"\\f153\"}.fa-gbp:before{content:\"\\f154\"}.fa-dollar:before,.fa-usd:before{content:\"\\f155\"}.fa-rupee:before,.fa-inr:before{content:\"\\f156\"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:\"\\f157\"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:\"\\f158\"}.fa-won:before,.fa-krw:before{content:\"\\f159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\f15a\"}.fa-file:before{content:\"\\f15b\"}.fa-file-text:before{content:\"\\f15c\"}.fa-sort-alpha-asc:before{content:\"\\f15d\"}.fa-sort-alpha-desc:before{content:\"\\f15e\"}.fa-sort-amount-asc:before{content:\"\\f160\"}.fa-sort-amount-desc:before{content:\"\\f161\"}.fa-sort-numeric-asc:before{content:\"\\f162\"}.fa-sort-numeric-desc:before{content:\"\\f163\"}.fa-thumbs-up:before{content:\"\\f164\"}.fa-thumbs-down:before{content:\"\\f165\"}.fa-youtube-square:before{content:\"\\f166\"}.fa-youtube:before{content:\"\\f167\"}.fa-xing:before{content:\"\\f168\"}.fa-xing-square:before{content:\"\\f169\"}.fa-youtube-play:before{content:\"\\f16a\"}.fa-dropbox:before{content:\"\\f16b\"}.fa-stack-overflow:before{content:\"\\f16c\"}.fa-instagram:before{content:\"\\f16d\"}.fa-flickr:before{content:\"\\f16e\"}.fa-adn:before{content:\"\\f170\"}.fa-bitbucket:before{content:\"\\f171\"}.fa-bitbucket-square:before{content:\"\\f172\"}.fa-tumblr:before{content:\"\\f173\"}.fa-tumblr-square:before{content:\"\\f174\"}.fa-long-arrow-down:before{content:\"\\f175\"}.fa-long-arrow-up:before{content:\"\\f176\"}.fa-long-arrow-left:before{content:\"\\f177\"}.fa-long-arrow-right:before{content:\"\\f178\"}.fa-apple:before{content:\"\\f179\"}.fa-windows:before{content:\"\\f17a\"}.fa-android:before{content:\"\\f17b\"}.fa-linux:before{content:\"\\f17c\"}.fa-dribbble:before{content:\"\\f17d\"}.fa-skype:before{content:\"\\f17e\"}.fa-foursquare:before{content:\"\\f180\"}.fa-trello:before{content:\"\\f181\"}.fa-female:before{content:\"\\f182\"}.fa-male:before{content:\"\\f183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\f184\"}.fa-sun-o:before{content:\"\\f185\"}.fa-moon-o:before{content:\"\\f186\"}.fa-archive:before{content:\"\\f187\"}.fa-bug:before{content:\"\\f188\"}.fa-vk:before{content:\"\\f189\"}.fa-weibo:before{content:\"\\f18a\"}.fa-renren:before{content:\"\\f18b\"}.fa-pagelines:before{content:\"\\f18c\"}.fa-stack-exchange:before{content:\"\\f18d\"}.fa-arrow-circle-o-right:before{content:\"\\f18e\"}.fa-arrow-circle-o-left:before{content:\"\\f190\"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:\"\\f191\"}.fa-dot-circle-o:before{content:\"\\f192\"}.fa-wheelchair:before{content:\"\\f193\"}.fa-vimeo-square:before{content:\"\\f194\"}.fa-turkish-lira:before,.fa-try:before{content:\"\\f195\"}.fa-plus-square-o:before{content:\"\\f196\"}.fa-space-shuttle:before{content:\"\\f197\"}.fa-slack:before{content:\"\\f198\"}.fa-envelope-square:before{content:\"\\f199\"}.fa-wordpress:before{content:\"\\f19a\"}.fa-openid:before{content:\"\\f19b\"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:\"\\f19c\"}.fa-mortar-board:before,.fa-graduation-cap:before{content:\"\\f19d\"}.fa-yahoo:before{content:\"\\f19e\"}.fa-google:before{content:\"\\f1a0\"}.fa-reddit:before{content:\"\\f1a1\"}.fa-reddit-square:before{content:\"\\f1a2\"}.fa-stumbleupon-circle:before{content:\"\\f1a3\"}.fa-stumbleupon:before{content:\"\\f1a4\"}.fa-delicious:before{content:\"\\f1a5\"}.fa-digg:before{content:\"\\f1a6\"}.fa-pied-piper:before{content:\"\\f1a7\"}.fa-pied-piper-alt:before{content:\"\\f1a8\"}.fa-drupal:before{content:\"\\f1a9\"}.fa-joomla:before{content:\"\\f1aa\"}.fa-language:before{content:\"\\f1ab\"}.fa-fax:before{content:\"\\f1ac\"}.fa-building:before{content:\"\\f1ad\"}.fa-child:before{content:\"\\f1ae\"}.fa-paw:before{content:\"\\f1b0\"}.fa-spoon:before{content:\"\\f1b1\"}.fa-cube:before{content:\"\\f1b2\"}.fa-cubes:before{content:\"\\f1b3\"}.fa-behance:before{content:\"\\f1b4\"}.fa-behance-square:before{content:\"\\f1b5\"}.fa-steam:before{content:\"\\f1b6\"}.fa-steam-square:before{content:\"\\f1b7\"}.fa-recycle:before{content:\"\\f1b8\"}.fa-automobile:before,.fa-car:before{content:\"\\f1b9\"}.fa-cab:before,.fa-taxi:before{content:\"\\f1ba\"}.fa-tree:before{content:\"\\f1bb\"}.fa-spotify:before{content:\"\\f1bc\"}.fa-deviantart:before{content:\"\\f1bd\"}.fa-soundcloud:before{content:\"\\f1be\"}.fa-database:before{content:\"\\f1c0\"}.fa-file-pdf-o:before{content:\"\\f1c1\"}.fa-file-word-o:before{content:\"\\f1c2\"}.fa-file-excel-o:before{content:\"\\f1c3\"}.fa-file-powerpoint-o:before{content:\"\\f1c4\"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:\"\\f1c5\"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:\"\\f1c6\"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:\"\\f1c7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\f1c8\"}.fa-file-code-o:before{content:\"\\f1c9\"}.fa-vine:before{content:\"\\f1ca\"}.fa-codepen:before{content:\"\\f1cb\"}.fa-jsfiddle:before{content:\"\\f1cc\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:\"\\f1cd\"}.fa-circle-o-notch:before{content:\"\\f1ce\"}.fa-ra:before,.fa-rebel:before{content:\"\\f1d0\"}.fa-ge:before,.fa-empire:before{content:\"\\f1d1\"}.fa-git-square:before{content:\"\\f1d2\"}.fa-git:before{content:\"\\f1d3\"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:\"\\f1d4\"}.fa-tencent-weibo:before{content:\"\\f1d5\"}.fa-qq:before{content:\"\\f1d6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\f1d7\"}.fa-send:before,.fa-paper-plane:before{content:\"\\f1d8\"}.fa-send-o:before,.fa-paper-plane-o:before{content:\"\\f1d9\"}.fa-history:before{content:\"\\f1da\"}.fa-circle-thin:before{content:\"\\f1db\"}.fa-header:before{content:\"\\f1dc\"}.fa-paragraph:before{content:\"\\f1dd\"}.fa-sliders:before{content:\"\\f1de\"}.fa-share-alt:before{content:\"\\f1e0\"}.fa-share-alt-square:before{content:\"\\f1e1\"}.fa-bomb:before{content:\"\\f1e2\"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:\"\\f1e3\"}.fa-tty:before{content:\"\\f1e4\"}.fa-binoculars:before{content:\"\\f1e5\"}.fa-plug:before{content:\"\\f1e6\"}.fa-slideshare:before{content:\"\\f1e7\"}.fa-twitch:before{content:\"\\f1e8\"}.fa-yelp:before{content:\"\\f1e9\"}.fa-newspaper-o:before{content:\"\\f1ea\"}.fa-wifi:before{content:\"\\f1eb\"}.fa-calculator:before{content:\"\\f1ec\"}.fa-paypal:before{content:\"\\f1ed\"}.fa-google-wallet:before{content:\"\\f1ee\"}.fa-cc-visa:before{content:\"\\f1f0\"}.fa-cc-mastercard:before{content:\"\\f1f1\"}.fa-cc-discover:before{content:\"\\f1f2\"}.fa-cc-amex:before{content:\"\\f1f3\"}.fa-cc-paypal:before{content:\"\\f1f4\"}.fa-cc-stripe:before{content:\"\\f1f5\"}.fa-bell-slash:before{content:\"\\f1f6\"}.fa-bell-slash-o:before{content:\"\\f1f7\"}.fa-trash:before{content:\"\\f1f8\"}.fa-copyright:before{content:\"\\f1f9\"}.fa-at:before{content:\"\\f1fa\"}.fa-eyedropper:before{content:\"\\f1fb\"}.fa-paint-brush:before{content:\"\\f1fc\"}.fa-birthday-cake:before{content:\"\\f1fd\"}.fa-area-chart:before{content:\"\\f1fe\"}.fa-pie-chart:before{content:\"\\f200\"}.fa-line-chart:before{content:\"\\f201\"}.fa-lastfm:before{content:\"\\f202\"}.fa-lastfm-square:before{content:\"\\f203\"}.fa-toggle-off:before{content:\"\\f204\"}.fa-toggle-on:before{content:\"\\f205\"}.fa-bicycle:before{content:\"\\f206\"}.fa-bus:before{content:\"\\f207\"}.fa-ioxhost:before{content:\"\\f208\"}.fa-angellist:before{content:\"\\f209\"}.fa-cc:before{content:\"\\f20a\"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:\"\\f20b\"}.fa-meanpath:before{content:\"\\f20c\"}.fa-buysellads:before{content:\"\\f20d\"}.fa-connectdevelop:before{content:\"\\f20e\"}.fa-dashcube:before{content:\"\\f210\"}.fa-forumbee:before{content:\"\\f211\"}.fa-leanpub:before{content:\"\\f212\"}.fa-sellsy:before{content:\"\\f213\"}.fa-shirtsinbulk:before{content:\"\\f214\"}.fa-simplybuilt:before{content:\"\\f215\"}.fa-skyatlas:before{content:\"\\f216\"}.fa-cart-plus:before{content:\"\\f217\"}.fa-cart-arrow-down:before{content:\"\\f218\"}.fa-diamond:before{content:\"\\f219\"}.fa-ship:before{content:\"\\f21a\"}.fa-user-secret:before{content:\"\\f21b\"}.fa-motorcycle:before{content:\"\\f21c\"}.fa-street-view:before{content:\"\\f21d\"}.fa-heartbeat:before{content:\"\\f21e\"}.fa-venus:before{content:\"\\f221\"}.fa-mars:before{content:\"\\f222\"}.fa-mercury:before{content:\"\\f223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\f224\"}.fa-transgender-alt:before{content:\"\\f225\"}.fa-venus-double:before{content:\"\\f226\"}.fa-mars-double:before{content:\"\\f227\"}.fa-venus-mars:before{content:\"\\f228\"}.fa-mars-stroke:before{content:\"\\f229\"}.fa-mars-stroke-v:before{content:\"\\f22a\"}.fa-mars-stroke-h:before{content:\"\\f22b\"}.fa-neuter:before{content:\"\\f22c\"}.fa-genderless:before{content:\"\\f22d\"}.fa-facebook-official:before{content:\"\\f230\"}.fa-pinterest-p:before{content:\"\\f231\"}.fa-whatsapp:before{content:\"\\f232\"}.fa-server:before{content:\"\\f233\"}.fa-user-plus:before{content:\"\\f234\"}.fa-user-times:before{content:\"\\f235\"}.fa-hotel:before,.fa-bed:before{content:\"\\f236\"}.fa-viacoin:before{content:\"\\f237\"}.fa-train:before{content:\"\\f238\"}.fa-subway:before{content:\"\\f239\"}.fa-medium:before{content:\"\\f23a\"}.fa-yc:before,.fa-y-combinator:before{content:\"\\f23b\"}.fa-optin-monster:before{content:\"\\f23c\"}.fa-opencart:before{content:\"\\f23d\"}.fa-expeditedssl:before{content:\"\\f23e\"}.fa-battery-4:before,.fa-battery-full:before{content:\"\\f240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\f241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\f242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\f243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\f244\"}.fa-mouse-pointer:before{content:\"\\f245\"}.fa-i-cursor:before{content:\"\\f246\"}.fa-object-group:before{content:\"\\f247\"}.fa-object-ungroup:before{content:\"\\f248\"}.fa-sticky-note:before{content:\"\\f249\"}.fa-sticky-note-o:before{content:\"\\f24a\"}.fa-cc-jcb:before{content:\"\\f24b\"}.fa-cc-diners-club:before{content:\"\\f24c\"}.fa-clone:before{content:\"\\f24d\"}.fa-balance-scale:before{content:\"\\f24e\"}.fa-hourglass-o:before{content:\"\\f250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\f251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\f252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\f253\"}.fa-hourglass:before{content:\"\\f254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\f255\"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:\"\\f256\"}.fa-hand-scissors-o:before{content:\"\\f257\"}.fa-hand-lizard-o:before{content:\"\\f258\"}.fa-hand-spock-o:before{content:\"\\f259\"}.fa-hand-pointer-o:before{content:\"\\f25a\"}.fa-hand-peace-o:before{content:\"\\f25b\"}.fa-trademark:before{content:\"\\f25c\"}.fa-registered:before{content:\"\\f25d\"}.fa-creative-commons:before{content:\"\\f25e\"}.fa-gg:before{content:\"\\f260\"}.fa-gg-circle:before{content:\"\\f261\"}.fa-tripadvisor:before{content:\"\\f262\"}.fa-odnoklassniki:before{content:\"\\f263\"}.fa-odnoklassniki-square:before{content:\"\\f264\"}.fa-get-pocket:before{content:\"\\f265\"}.fa-wikipedia-w:before{content:\"\\f266\"}.fa-safari:before{content:\"\\f267\"}.fa-chrome:before{content:\"\\f268\"}.fa-firefox:before{content:\"\\f269\"}.fa-opera:before{content:\"\\f26a\"}.fa-internet-explorer:before{content:\"\\f26b\"}.fa-tv:before,.fa-television:before{content:\"\\f26c\"}.fa-contao:before{content:\"\\f26d\"}.fa-500px:before{content:\"\\f26e\"}.fa-amazon:before{content:\"\\f270\"}.fa-calendar-plus-o:before{content:\"\\f271\"}.fa-calendar-minus-o:before{content:\"\\f272\"}.fa-calendar-times-o:before{content:\"\\f273\"}.fa-calendar-check-o:before{content:\"\\f274\"}.fa-industry:before{content:\"\\f275\"}.fa-map-pin:before{content:\"\\f276\"}.fa-map-signs:before{content:\"\\f277\"}.fa-map-o:before{content:\"\\f278\"}.fa-map:before{content:\"\\f279\"}.fa-commenting:before{content:\"\\f27a\"}.fa-commenting-o:before{content:\"\\f27b\"}.fa-houzz:before{content:\"\\f27c\"}.fa-vimeo:before{content:\"\\f27d\"}.fa-black-tie:before{content:\"\\f27e\"}.fa-fonticons:before{content:\"\\f280\"}\n"]}
\ No newline at end of file
diff --git a/filer/static/filer/fonts/FontAwesome.otf b/filer/static/filer/fonts/FontAwesome.otf
new file mode 100644
index 000000000..681bdd4d4
Binary files /dev/null and b/filer/static/filer/fonts/FontAwesome.otf differ
diff --git a/filer/static/filer/fonts/django-filer-iconfont.eot b/filer/static/filer/fonts/django-filer-iconfont.eot
new file mode 100644
index 000000000..2b047ba3b
Binary files /dev/null and b/filer/static/filer/fonts/django-filer-iconfont.eot differ
diff --git a/filer/static/filer/fonts/django-filer-iconfont.svg b/filer/static/filer/fonts/django-filer-iconfont.svg
new file mode 100644
index 000000000..8bb3132b7
--- /dev/null
+++ b/filer/static/filer/fonts/django-filer-iconfont.svg
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/fonts/django-filer-iconfont.ttf b/filer/static/filer/fonts/django-filer-iconfont.ttf
new file mode 100644
index 000000000..7c0224e6c
Binary files /dev/null and b/filer/static/filer/fonts/django-filer-iconfont.ttf differ
diff --git a/filer/static/filer/fonts/django-filer-iconfont.woff b/filer/static/filer/fonts/django-filer-iconfont.woff
new file mode 100644
index 000000000..98a0738c6
Binary files /dev/null and b/filer/static/filer/fonts/django-filer-iconfont.woff differ
diff --git a/filer/static/filer/fonts/django-filer-iconfont.woff2 b/filer/static/filer/fonts/django-filer-iconfont.woff2
new file mode 100644
index 000000000..ff7d86d55
Binary files /dev/null and b/filer/static/filer/fonts/django-filer-iconfont.woff2 differ
diff --git a/filer/static/filer/fonts/fontawesome-webfont.eot b/filer/static/filer/fonts/fontawesome-webfont.eot
new file mode 100644
index 000000000..a30335d74
Binary files /dev/null and b/filer/static/filer/fonts/fontawesome-webfont.eot differ
diff --git a/filer/static/filer/fonts/fontawesome-webfont.svg b/filer/static/filer/fonts/fontawesome-webfont.svg
new file mode 100644
index 000000000..6fd19abcb
--- /dev/null
+++ b/filer/static/filer/fonts/fontawesome-webfont.svg
@@ -0,0 +1,640 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/filer/static/filer/fonts/fontawesome-webfont.ttf b/filer/static/filer/fonts/fontawesome-webfont.ttf
new file mode 100644
index 000000000..d7994e130
Binary files /dev/null and b/filer/static/filer/fonts/fontawesome-webfont.ttf differ
diff --git a/filer/static/filer/fonts/fontawesome-webfont.woff b/filer/static/filer/fonts/fontawesome-webfont.woff
new file mode 100644
index 000000000..6fd4ede0f
Binary files /dev/null and b/filer/static/filer/fonts/fontawesome-webfont.woff differ
diff --git a/filer/static/filer/fonts/fontawesome-webfont.woff2 b/filer/static/filer/fonts/fontawesome-webfont.woff2
new file mode 100644
index 000000000..5560193cc
Binary files /dev/null and b/filer/static/filer/fonts/fontawesome-webfont.woff2 differ
diff --git a/filer/static/filer/fonts/src/arrow-down.svg b/filer/static/filer/fonts/src/arrow-down.svg
new file mode 100644
index 000000000..ad16b7805
--- /dev/null
+++ b/filer/static/filer/fonts/src/arrow-down.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
+
diff --git a/filer/static/filer/fonts/src/caret-down.svg b/filer/static/filer/fonts/src/caret-down.svg
new file mode 100644
index 000000000..fca4895cd
--- /dev/null
+++ b/filer/static/filer/fonts/src/caret-down.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/filer/static/filer/fonts/src/chevron-right.svg b/filer/static/filer/fonts/src/chevron-right.svg
new file mode 100644
index 000000000..a94274f88
--- /dev/null
+++ b/filer/static/filer/fonts/src/chevron-right.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/filer/static/filer/fonts/src/download.svg b/filer/static/filer/fonts/src/download.svg
new file mode 100644
index 000000000..5a826bb9e
--- /dev/null
+++ b/filer/static/filer/fonts/src/download.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/filer/static/filer/fonts/src/expand.svg b/filer/static/filer/fonts/src/expand.svg
new file mode 100644
index 000000000..57ccd9f53
--- /dev/null
+++ b/filer/static/filer/fonts/src/expand.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/filer/static/filer/fonts/src/link.svg b/filer/static/filer/fonts/src/link.svg
new file mode 100644
index 000000000..06ea8f409
--- /dev/null
+++ b/filer/static/filer/fonts/src/link.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/filer/static/filer/fonts/src/move-to-folder.svg b/filer/static/filer/fonts/src/move-to-folder.svg
new file mode 100644
index 000000000..1b93780fe
--- /dev/null
+++ b/filer/static/filer/fonts/src/move-to-folder.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/filer/static/filer/fonts/src/picture.svg b/filer/static/filer/fonts/src/picture.svg
new file mode 100644
index 000000000..5642c39ef
--- /dev/null
+++ b/filer/static/filer/fonts/src/picture.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/filer/static/filer/fonts/src/remove-selection.svg b/filer/static/filer/fonts/src/remove-selection.svg
new file mode 100644
index 000000000..8f5a4ef75
--- /dev/null
+++ b/filer/static/filer/fonts/src/remove-selection.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/filer/static/filer/fonts/src/select.svg b/filer/static/filer/fonts/src/select.svg
new file mode 100644
index 000000000..c8b67a60a
--- /dev/null
+++ b/filer/static/filer/fonts/src/select.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/filer/static/filer/fonts/src/th-large.svg b/filer/static/filer/fonts/src/th-large.svg
new file mode 100644
index 000000000..347853e02
--- /dev/null
+++ b/filer/static/filer/fonts/src/th-large.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/filer/static/filer/fonts/src/th-list.svg b/filer/static/filer/fonts/src/th-list.svg
new file mode 100644
index 000000000..ed2dbf47d
--- /dev/null
+++ b/filer/static/filer/fonts/src/th-list.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/filer/static/filer/fonts/src/upload.svg b/filer/static/filer/fonts/src/upload.svg
new file mode 100644
index 000000000..166624b48
--- /dev/null
+++ b/filer/static/filer/fonts/src/upload.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/filer/static/filer/icons/cloud-up.svg b/filer/static/filer/icons/cloud-up.svg
new file mode 100644
index 000000000..75fb6a91c
--- /dev/null
+++ b/filer/static/filer/icons/cloud-up.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-audio.svg b/filer/static/filer/icons/file-audio.svg
new file mode 100644
index 000000000..070886d5f
--- /dev/null
+++ b/filer/static/filer/icons/file-audio.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-empty.svg b/filer/static/filer/icons/file-empty.svg
new file mode 100644
index 000000000..04ed00ad4
--- /dev/null
+++ b/filer/static/filer/icons/file-empty.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-font.svg b/filer/static/filer/icons/file-font.svg
new file mode 100644
index 000000000..77ce44c3c
--- /dev/null
+++ b/filer/static/filer/icons/file-font.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-missing.svg b/filer/static/filer/icons/file-missing.svg
new file mode 100644
index 000000000..8d1d17a25
--- /dev/null
+++ b/filer/static/filer/icons/file-missing.svg
@@ -0,0 +1,84 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-pdf.svg b/filer/static/filer/icons/file-pdf.svg
new file mode 100644
index 000000000..a52203f52
--- /dev/null
+++ b/filer/static/filer/icons/file-pdf.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-picture.svg b/filer/static/filer/icons/file-picture.svg
new file mode 100644
index 000000000..cffeb3218
--- /dev/null
+++ b/filer/static/filer/icons/file-picture.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-unknown.svg b/filer/static/filer/icons/file-unknown.svg
new file mode 100644
index 000000000..426904a11
--- /dev/null
+++ b/filer/static/filer/icons/file-unknown.svg
@@ -0,0 +1,69 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-video.svg b/filer/static/filer/icons/file-video.svg
new file mode 100644
index 000000000..04576b68b
--- /dev/null
+++ b/filer/static/filer/icons/file-video.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/file-zip.svg b/filer/static/filer/icons/file-zip.svg
new file mode 100644
index 000000000..6d0afa9ba
--- /dev/null
+++ b/filer/static/filer/icons/file-zip.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/folder-dropdown.svg b/filer/static/filer/icons/folder-dropdown.svg
new file mode 100644
index 000000000..5afa4e93e
--- /dev/null
+++ b/filer/static/filer/icons/folder-dropdown.svg
@@ -0,0 +1,85 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/folder-root.svg b/filer/static/filer/icons/folder-root.svg
new file mode 100644
index 000000000..9ee4a132b
--- /dev/null
+++ b/filer/static/filer/icons/folder-root.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/folder-unfiled.svg b/filer/static/filer/icons/folder-unfiled.svg
new file mode 100644
index 000000000..da2b21935
--- /dev/null
+++ b/filer/static/filer/icons/folder-unfiled.svg
@@ -0,0 +1,77 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/icons/folder.svg b/filer/static/filer/icons/folder.svg
new file mode 100644
index 000000000..72f50ffba
--- /dev/null
+++ b/filer/static/filer/icons/folder.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/filer/static/filer/img/button-bg.gif b/filer/static/filer/img/button-bg.gif
new file mode 100644
index 000000000..10106108d
Binary files /dev/null and b/filer/static/filer/img/button-bg.gif differ
diff --git a/filer/static/filer/img/icon_changelink.gif b/filer/static/filer/img/icon_changelink.gif
new file mode 100644
index 000000000..0bd9d502b
Binary files /dev/null and b/filer/static/filer/img/icon_changelink.gif differ
diff --git a/filer/static/filer/img/icon_deletelink.gif b/filer/static/filer/img/icon_deletelink.gif
new file mode 100644
index 000000000..165f5cca4
Binary files /dev/null and b/filer/static/filer/img/icon_deletelink.gif differ
diff --git a/filer/static/filer/js/addons/copy-move-files.js b/filer/static/filer/js/addons/copy-move-files.js
new file mode 100644
index 000000000..1673c96d8
--- /dev/null
+++ b/filer/static/filer/js/addons/copy-move-files.js
@@ -0,0 +1,32 @@
+'use strict';
+/* global Cl */
+
+/*
+ This functionality is used in folder/choose_copy_destination.html template
+ to disable submit if there is only one folder to copy
+*/
+
+document.addEventListener('DOMContentLoaded', () => {
+ const destination = document.getElementById('destination');
+ if (!destination) {
+ return;
+ }
+
+ const destinationOptions = destination.querySelectorAll('option');
+ const destinationOptionLength = destinationOptions.length;
+ const submit = document.querySelector('.js-submit-copy-move');
+ const tooltip = document.querySelector('.js-disabled-btn-tooltip');
+
+ if (destinationOptionLength === 1 && destinationOptions[0].disabled) {
+ if (submit) {
+ submit.style.display = 'none';
+ }
+ if (tooltip) {
+ tooltip.style.display = 'inline-block';
+ }
+ }
+
+ if (Cl.filerTooltip) {
+ Cl.filerTooltip();
+ }
+});
diff --git a/filer/static/filer/js/addons/dropdown-menu.js b/filer/static/filer/js/addons/dropdown-menu.js
new file mode 100644
index 000000000..512dda3d5
--- /dev/null
+++ b/filer/static/filer/js/addons/dropdown-menu.js
@@ -0,0 +1,249 @@
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.6
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+'use strict';
+
+(() => {
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ const backdropClass = 'filer-dropdown-backdrop';
+ const toggleSelector = '[data-toggle="filer-dropdown"]';
+
+ class Dropdown {
+ constructor(element) {
+ this.element = element;
+ element.addEventListener('click', () => this.toggle());
+ }
+
+ toggle() {
+ const element = this.element;
+ const parent = getParent(element);
+ const isActive = parent.classList.contains('open');
+ const relatedTarget = { relatedTarget: element };
+
+ if (element.disabled || element.classList.contains('disabled')) {
+ return false;
+ }
+
+ clearMenus();
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !parent.closest('.navbar-nav')) {
+ // if mobile we use a backdrop because click events don't delegate
+ const backdrop = document.createElement('div');
+ backdrop.className = backdropClass;
+ element.parentNode.insertBefore(backdrop, element.nextSibling);
+ backdrop.addEventListener('click', clearMenus);
+ }
+
+ const showEvent = new CustomEvent('show.bs.filer-dropdown', {
+ bubbles: true,
+ cancelable: true,
+ detail: relatedTarget
+ });
+ parent.dispatchEvent(showEvent);
+
+ if (showEvent.defaultPrevented) {
+ return false;
+ }
+
+ element.focus();
+ element.setAttribute('aria-expanded', 'true');
+ parent.classList.add('open');
+
+ const shownEvent = new CustomEvent('shown.bs.filer-dropdown', {
+ bubbles: true,
+ detail: relatedTarget
+ });
+ parent.dispatchEvent(shownEvent);
+ }
+
+ return false;
+ }
+
+ keydown(e) {
+ const element = this.element;
+ const parent = getParent(element);
+ const isActive = parent.classList.contains('open');
+ const desc = ' li:not(.disabled):visible a';
+ const items = Array.from(parent.querySelectorAll(`.filer-dropdown-menu${desc}`))
+ .filter(item => item.offsetParent !== null); // visible check
+ const index = items.indexOf(e.target);
+
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) {
+ return;
+ }
+
+ e.preventDefault();
+ e.stopPropagation();
+
+ if (element.disabled || element.classList.contains('disabled')) {
+ return;
+ }
+
+ if ((!isActive && e.which !== 27) || (isActive && e.which === 27)) {
+ if (e.which === 27) {
+ parent.querySelector(toggleSelector)?.focus();
+ }
+ return element.click();
+ }
+
+ if (!items.length) {
+ return;
+ }
+
+ let newIndex = index;
+ if (e.which === 38 && index > 0) {
+ newIndex--; // up
+ }
+ if (e.which === 40 && index < items.length - 1) {
+ newIndex++; // down
+ }
+ if (newIndex === -1) {
+ newIndex = 0;
+ }
+
+ items[newIndex]?.focus();
+ }
+ }
+
+ function getParent(element) {
+ let selector = element.getAttribute('data-target');
+ let parent = selector ? document.querySelector(selector) : null;
+
+ if (!selector) {
+ selector = element.getAttribute('href');
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, ''); // strip for ie7
+ parent = selector ? document.querySelector(selector) : null;
+ }
+
+ return parent && parent.parentNode ? parent : element.parentNode;
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) {
+ return;
+ }
+
+ // Remove all backdrops
+ document.querySelectorAll(`.${backdropClass}`).forEach(el => el.remove());
+
+ document.querySelectorAll(toggleSelector).forEach((toggle) => {
+ const parent = getParent(toggle);
+ const relatedTarget = { relatedTarget: toggle };
+
+ if (!parent.classList.contains('open')) {
+ return;
+ }
+
+ if (e && e.type === 'click' && /input|textarea/i.test(e.target.tagName) && parent.contains(e.target)) {
+ return;
+ }
+
+ const hideEvent = new CustomEvent('hide.bs.filer-dropdown', {
+ bubbles: true,
+ cancelable: true,
+ detail: relatedTarget
+ });
+ parent.dispatchEvent(hideEvent);
+
+ if (hideEvent.defaultPrevented) {
+ return;
+ }
+
+ toggle.setAttribute('aria-expanded', 'false');
+ parent.classList.remove('open');
+
+ const hiddenEvent = new CustomEvent('hidden.bs.filer-dropdown', {
+ bubbles: true,
+ detail: relatedTarget
+ });
+ parent.dispatchEvent(hiddenEvent);
+ });
+ }
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ this.forEach((element) => {
+ let data = element._filerDropdownInstance;
+
+ if (!data) {
+ data = new Dropdown(element);
+ element._filerDropdownInstance = data;
+ }
+ if (typeof option === 'string') {
+ data[option].call(element);
+ }
+ });
+ return this;
+ }
+
+ // Extend NodeList and HTMLCollection with dropdown method
+ if (!NodeList.prototype.dropdown) {
+ NodeList.prototype.dropdown = function(option) {
+ return Plugin.call(this, option);
+ };
+ }
+ if (!HTMLCollection.prototype.dropdown) {
+ HTMLCollection.prototype.dropdown = function(option) {
+ return Plugin.call(this, option);
+ };
+ }
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ document.addEventListener('click', clearMenus);
+
+ document.addEventListener('click', (e) => {
+ if (e.target.closest('.filer-dropdown form')) {
+ e.stopPropagation();
+ }
+ });
+
+ document.addEventListener('click', (e) => {
+ const toggle = e.target.closest(toggleSelector);
+ if (toggle) {
+ const instance = toggle._filerDropdownInstance || new Dropdown(toggle);
+ if (!toggle._filerDropdownInstance) {
+ toggle._filerDropdownInstance = instance;
+ }
+ instance.toggle(e);
+ }
+ });
+
+ document.addEventListener('keydown', (e) => {
+ const toggle = e.target.closest(toggleSelector);
+ if (toggle) {
+ const instance = toggle._filerDropdownInstance || new Dropdown(toggle);
+ if (!toggle._filerDropdownInstance) {
+ toggle._filerDropdownInstance = instance;
+ }
+ instance.keydown(e);
+ }
+ });
+
+ document.addEventListener('keydown', (e) => {
+ const menu = e.target.closest('.filer-dropdown-menu');
+ if (menu) {
+ const toggle = menu.parentNode.querySelector(toggleSelector);
+ if (toggle) {
+ const instance = toggle._filerDropdownInstance || new Dropdown(toggle);
+ if (!toggle._filerDropdownInstance) {
+ toggle._filerDropdownInstance = instance;
+ }
+ instance.keydown(e);
+ }
+ }
+ });
+
+ // Export for compatibility
+ window.FilerDropdown = Dropdown;
+})();
diff --git a/filer/static/filer/js/addons/dropzone.init.js b/filer/static/filer/js/addons/dropzone.init.js
new file mode 100644
index 000000000..dd49e3806
--- /dev/null
+++ b/filer/static/filer/js/addons/dropzone.init.js
@@ -0,0 +1,234 @@
+// #DROPZONE#
+// This script implements the dropzone settings
+'use strict';
+
+import Dropzone from 'dropzone';
+
+if (Dropzone) {
+ Dropzone.autoDiscover = false;
+}
+
+document.addEventListener('DOMContentLoaded', () => {
+ const previewImageSelector = '.js-img-preview';
+ const dropzoneSelector = '.js-filer-dropzone';
+ const dropzones = document.querySelectorAll(dropzoneSelector);
+ const messageSelector = '.js-filer-dropzone-message';
+ const lookupButtonSelector = '.js-related-lookup';
+ const editButtonSelector = '.js-related-edit';
+ const dropzoneTemplate = '.js-filer-dropzone-template';
+ const progressSelector = '.js-filer-dropzone-progress';
+ const previewImageWrapperSelector = '.js-img-wrapper';
+ const filerClearerSelector = '.filerClearer';
+ const fileChooseSelector = '.js-file-selector';
+ const fileIdInputSelector = '.vForeignKeyRawIdAdminField';
+ const dragHoverClass = 'dz-drag-hover';
+ const hiddenClass = 'hidden';
+ const mobileClass = 'filer-dropzone-mobile';
+ const objectAttachedClass = 'js-object-attached';
+ const minWidth = 500;
+
+ const checkMinWidth = (element) => {
+ const width = element.offsetWidth;
+ if (width < minWidth) {
+ element.classList.add(mobileClass);
+ } else {
+ element.classList.remove(mobileClass);
+ }
+ };
+
+ const showError = (message) => {
+ try {
+ window.parent.CMS.API.Messages.open({
+ message: message
+ });
+ } catch {
+ if (window.filerShowError) {
+ window.filerShowError(message);
+ } else {
+ alert(message);
+ }
+ }
+ };
+
+ const createDropzone = function (dropzone) {
+ const dropzoneUrl = dropzone.dataset.url;
+ const inputId = dropzone.querySelector(fileIdInputSelector);
+ const isImage = inputId?.getAttribute('name') === 'image';
+ const lookupButton = dropzone.querySelector(lookupButtonSelector);
+ const editButton = dropzone.querySelector(editButtonSelector);
+ const message = dropzone.querySelector(messageSelector);
+ const clearButton = dropzone.querySelector(filerClearerSelector);
+ const fileChoose = dropzone.querySelector(fileChooseSelector);
+
+ if (dropzone.dropzone) {
+ return;
+ }
+
+ const resizeHandler = () => {
+ checkMinWidth(dropzone);
+ };
+ window.addEventListener('resize', resizeHandler);
+
+ new Dropzone(dropzone, {
+ url: dropzoneUrl,
+ paramName: 'file',
+ maxFiles: 1,
+ maxFilesize: dropzone.dataset.maxFilesize,
+ previewTemplate: document.querySelector(dropzoneTemplate).innerHTML || '',
+ clickable: false,
+ addRemoveLinks: false,
+ init: function () {
+ checkMinWidth(dropzone);
+
+ this.on('removedfile', () => {
+ if (fileChoose) {
+ fileChoose.style.display = '';
+ }
+ dropzone.classList.remove(objectAttachedClass);
+ this.removeAllFiles();
+ clearButton?.click();
+ });
+
+ const images = this.element.querySelectorAll('img');
+ images.forEach((img) => {
+ img.addEventListener('dragstart', (event) => {
+ event.preventDefault();
+ });
+ });
+
+ if (clearButton) {
+ clearButton.addEventListener('click', () => {
+ dropzone.classList.remove(objectAttachedClass);
+ // const changeEvent = new Event('change', { bubbles: true });
+ // inputId?.dispatchEvent(changeEvent);
+ });
+ }
+ },
+ maxfilesexceeded: function () {
+ this.removeAllFiles(true);
+ },
+ drop: function () {
+ this.removeAllFiles(true);
+ clearButton?.click();
+ const progressEl = dropzone.querySelector(progressSelector);
+ if (progressEl) {
+ progressEl.classList.remove(hiddenClass);
+ }
+ if (fileChoose) {
+ fileChoose.style.display = 'block';
+ }
+ lookupButton?.classList.add('related-lookup-change');
+ editButton?.classList.add('related-lookup-change');
+ message?.classList.add(hiddenClass);
+ dropzone.classList.remove(dragHoverClass);
+ dropzone.classList.add(objectAttachedClass);
+ },
+ success: function (file, response) {
+ const progressEl = dropzone.querySelector(progressSelector);
+ if (progressEl) {
+ progressEl.classList.add(hiddenClass);
+ }
+
+ if (file && file.status === 'success' && response) {
+ if (response.file_id && inputId) {
+ inputId.value = response.file_id;
+ const changeEvent = new Event('change', { bubbles: true });
+ inputId.dispatchEvent(changeEvent);
+ }
+ if (response.thumbnail_180 && isImage) {
+ const previewImg = dropzone.querySelector(previewImageSelector);
+ if (previewImg) {
+ previewImg.style.backgroundImage = `url(${response.thumbnail_180})`;
+ }
+ const wrapper = dropzone.querySelector(previewImageWrapperSelector);
+ if (wrapper) {
+ wrapper.classList.remove(hiddenClass);
+ }
+ }
+ } else {
+ if (response && response.error) {
+ showError(`${file.name}: ${response.error}`);
+ }
+ this.removeAllFiles(true);
+ }
+
+ const images = this.element.querySelectorAll('img');
+ images.forEach((img) => {
+ img.addEventListener('dragstart', (event) => {
+ event.preventDefault();
+ });
+ });
+ },
+ error: function (file, msg, response) {
+ if (response && response.error) {
+ msg += ` ; ${response.error}`;
+ }
+ showError(`${file.name}: ${msg}`);
+ this.removeAllFiles(true);
+ },
+ reset: function () {
+ if (isImage) {
+ const wrapper = dropzone.querySelector(previewImageWrapperSelector);
+ if (wrapper) {
+ wrapper.classList.add(hiddenClass);
+ }
+ const previewImg = dropzone.querySelector(previewImageSelector);
+ if (previewImg) {
+ previewImg.style.backgroundImage = 'none';
+ }
+ }
+ dropzone.classList.remove(objectAttachedClass);
+ if (inputId) {
+ inputId.value = '';
+ }
+ lookupButton?.classList.remove('related-lookup-change');
+ editButton?.classList.remove('related-lookup-change');
+ message?.classList.remove(hiddenClass);
+ if (inputId) {
+ const changeEvent = new Event('change', { bubbles: true });
+ inputId.dispatchEvent(changeEvent);
+ }
+ }
+ });
+ };
+
+ if (dropzones.length && Dropzone) {
+ if (!window.filerDropzoneInitialized) {
+ window.filerDropzoneInitialized = true;
+ Dropzone.autoDiscover = false;
+ }
+ dropzones.forEach(createDropzone);
+
+ // Handle initialization of the dropzone on dynamic formsets (i.e. Django admin inlines)
+ document.addEventListener('formset:added', (event) => {
+ let dropzones;
+ let rowIdx;
+ let row;
+
+ if (event.detail && event.detail.formsetName) {
+ /*
+ Django 4.1 changed the event type being fired when adding
+ a new formset from a jQuery to a vanilla JavaScript event.
+ https://docs.djangoproject.com/en/4.1/ref/contrib/admin/javascript/
+
+ In this case we find the newly added row and initialize the
+ dropzone on any dropzoneSelector on that row.
+ */
+
+ rowIdx = parseInt(
+ document.getElementById(
+ `id_${event.detail.formsetName}-TOTAL_FORMS`
+ ).value, 10
+ ) - 1;
+ row = document.getElementById(`${event.detail.formsetName}-${rowIdx}`);
+ dropzones = row?.querySelectorAll(dropzoneSelector) || [];
+ } else {
+ // Fallback for older jQuery event format
+ row = event.target;
+ dropzones = row?.querySelectorAll(dropzoneSelector) || [];
+ }
+
+ dropzones?.forEach(createDropzone);
+ });
+ }
+});
diff --git a/filer/static/filer/js/addons/filer_popup_response.js b/filer/static/filer/js/addons/filer_popup_response.js
new file mode 100644
index 000000000..d0dfdef0c
--- /dev/null
+++ b/filer/static/filer/js/addons/filer_popup_response.js
@@ -0,0 +1,22 @@
+/*global opener */
+(function () {
+ 'use strict';
+ const dataElement = document.getElementById('django-admin-popup-response-constants');
+ let initData;
+
+ if (dataElement) {
+ initData = JSON.parse(dataElement.dataset.popupResponse);
+ switch (initData.action) {
+ case 'change':
+ // Specific function for file editing popup opened from widget
+ opener.dismissRelatedImageLookupPopup(window, initData.new_value, null, initData.obj, null);
+ break;
+ case 'delete':
+ opener.dismissDeleteRelatedObjectPopup(window, initData.value);
+ break;
+ default:
+ opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj);
+ break;
+ }
+ }
+})();
diff --git a/filer/static/filer/js/addons/focal-point.js b/filer/static/filer/js/addons/focal-point.js
new file mode 100644
index 000000000..ad1263c6e
--- /dev/null
+++ b/filer/static/filer/js/addons/focal-point.js
@@ -0,0 +1,253 @@
+// #FOCAL POINT#
+// This script implements the image focal point setting
+'use strict';
+
+window.Cl = window.Cl || {};
+
+(() => {
+ class FocalPoint {
+ constructor(options = {}) {
+ this.options = {
+ containerSelector: '.js-focal-point',
+ imageSelector: '.js-focal-point-image',
+ circleSelector: '.js-focal-point-circle',
+ locationSelector: '.js-focal-point-location',
+ draggableClass: 'draggable',
+ hiddenClass: 'hidden',
+ dataLocation: 'locationSelector',
+ ...options
+ };
+ this.focalPointInstances = [];
+ this._init = this._init.bind(this);
+ }
+
+ _init(container) {
+ const focalPointInstance = new FocalPointConstructor(container, this.options);
+ this.focalPointInstances.push(focalPointInstance);
+ }
+
+ initialize() {
+ const containers = document.querySelectorAll(this.options.containerSelector);
+ containers.forEach((container) => {
+ this._init(container);
+ });
+
+ if (window.Cl.mediator) {
+ window.Cl.mediator.subscribe('focal-point:init', this._init);
+ }
+ }
+
+ destroy() {
+ if (window.Cl.mediator) {
+ window.Cl.mediator.remove('focal-point:init', this._init);
+ }
+
+ this.focalPointInstances.forEach((focalPointInstance) => {
+ focalPointInstance.destroy();
+ });
+
+ this.focalPointInstances = [];
+ }
+ }
+
+ class FocalPointConstructor {
+ constructor(container, options = {}) {
+ this.options = {
+ imageSelector: '.js-focal-point-image',
+ circleSelector: '.js-focal-point-circle',
+ locationSelector: '.js-focal-point-location',
+ draggableClass: 'draggable',
+ hiddenClass: 'hidden',
+ dataLocation: 'locationSelector',
+ ...options
+ };
+
+ this.container = container;
+ this.image = this.container.querySelector(this.options.imageSelector);
+ this.circle = this.container.querySelector(this.options.circleSelector);
+ this.ratio = parseFloat(this.image?.dataset.ratio || 1);
+ this.location = this._getLocation();
+ this.isDragging = false;
+ this.dragStartX = 0;
+ this.dragStartY = 0;
+ this.circleStartX = 0;
+ this.circleStartY = 0;
+
+ this._onImageLoaded = this._onImageLoaded.bind(this);
+ this._onMouseDown = this._onMouseDown.bind(this);
+ this._onMouseMove = this._onMouseMove.bind(this);
+ this._onMouseUp = this._onMouseUp.bind(this);
+
+ if (this.image?.complete) {
+ this._onImageLoaded();
+ } else if (this.image) {
+ this.image.addEventListener('load', this._onImageLoaded);
+ }
+ }
+
+ _updateLocationValue(x, y) {
+ const locationValue = `${Math.round(x * this.ratio)},${Math.round(y * this.ratio)}`;
+ if (this.location) {
+ this.location.value = locationValue;
+ }
+ }
+
+ _getLocation() {
+ const locationSelector = this.container.dataset[this.options.dataLocation];
+ if (locationSelector) {
+ const newLocation = document.querySelector(locationSelector);
+ if (newLocation) {
+ return newLocation;
+ }
+ }
+ return this.container.querySelector(this.options.locationSelector);
+ }
+
+ _makeDraggable() {
+ if (!this.circle) {
+ return;
+ }
+
+ this.circle.classList.add(this.options.draggableClass);
+ this.circle.addEventListener('mousedown', this._onMouseDown);
+ this.circle.addEventListener('touchstart', this._onMouseDown, { passive: false });
+ }
+
+ _onMouseDown(event) {
+ event.preventDefault();
+ this.isDragging = true;
+
+ const touch = event.type === 'touchstart' ? event.touches[0] : event;
+
+ // Get container bounds
+ const containerRect = this.container.getBoundingClientRect();
+
+ // Calculate mouse position relative to container
+ this.dragStartX = touch.clientX - containerRect.left;
+ this.dragStartY = touch.clientY - containerRect.top;
+
+ // Get current circle position (center)
+ const circleRect = this.circle.getBoundingClientRect();
+ this.circleStartX = circleRect.left - containerRect.left + circleRect.width / 2;
+ this.circleStartY = circleRect.top - containerRect.top + circleRect.height / 2;
+
+ document.addEventListener('mousemove', this._onMouseMove);
+ document.addEventListener('mouseup', this._onMouseUp);
+ document.addEventListener('touchmove', this._onMouseMove, { passive: false });
+ document.addEventListener('touchend', this._onMouseUp);
+ }
+
+ _onMouseMove(event) {
+ if (!this.isDragging) {
+ return;
+ }
+
+ event.preventDefault();
+
+ const touch = event.type === 'touchmove' ? event.touches[0] : event;
+
+ // Get container bounds
+ const containerRect = this.container.getBoundingClientRect();
+
+ // Calculate current mouse position relative to container
+ const currentX = touch.clientX - containerRect.left;
+ const currentY = touch.clientY - containerRect.top;
+
+ // Calculate how much the mouse moved
+ const deltaX = currentX - this.dragStartX;
+ const deltaY = currentY - this.dragStartY;
+
+ // Calculate new center position
+ let centerX = this.circleStartX + deltaX;
+ let centerY = this.circleStartY + deltaY;
+
+ // Constrain center to container bounds
+ centerX = Math.max(0, Math.min(containerRect.width - 1, centerX));
+ centerY = Math.max(0, Math.min(containerRect.height - 1, centerY));
+
+ // Position circle by its top-left corner (center - radius)
+ this.circle.style.left = `${centerX}px`;
+ this.circle.style.top = `${centerY}px`;
+
+ // Update location value with center coordinates
+ this._updateLocationValue(centerX, centerY);
+ }
+
+ _onMouseUp() {
+ this.isDragging = false;
+ document.removeEventListener('mousemove', this._onMouseMove);
+ document.removeEventListener('mouseup', this._onMouseUp);
+ document.removeEventListener('touchmove', this._onMouseMove);
+ document.removeEventListener('touchend', this._onMouseUp);
+ }
+
+ _onImageLoaded() {
+ if (!this.image || this.image.naturalWidth === 0) {
+ return;
+ }
+
+ this.circle?.classList.remove(this.options.hiddenClass);
+
+ const locationValue = this.location?.value || '';
+ const imageWidth = this.image.offsetWidth;
+ const imageHeight = this.image.offsetHeight;
+
+ let x, y;
+
+ if (locationValue.length) {
+ const coords = locationValue.split(',');
+ x = Math.round(Number(coords[0]) / this.ratio);
+ y = Math.round(Number(coords[1]) / this.ratio);
+ } else {
+ x = imageWidth / 2;
+ y = imageHeight / 2;
+ }
+
+ if (isNaN(x) || isNaN(y)) {
+ return;
+ }
+
+ // Position circle (accounting for circle size)
+ if (this.circle) {
+ this.circle.style.left = `${x}px`;
+ this.circle.style.top = `${y}px`;
+ }
+
+ this._makeDraggable();
+ this._updateLocationValue(x, y);
+ }
+
+ destroy() {
+ if (this.circle?.classList.contains(this.options.draggableClass)) {
+ this.circle.removeEventListener('mousedown', this._onMouseDown);
+ this.circle.removeEventListener('touchstart', this._onMouseDown);
+ }
+
+ document.removeEventListener('mousemove', this._onMouseMove);
+ document.removeEventListener('mouseup', this._onMouseUp);
+ document.removeEventListener('touchmove', this._onMouseMove);
+ document.removeEventListener('touchend', this._onMouseUp);
+
+ if (this.image) {
+ this.image.removeEventListener('load', this._onImageLoaded);
+ }
+
+ this.options = null;
+ this.container = null;
+ this.image = null;
+ this.circle = null;
+ this.location = null;
+ this.ratio = null;
+ }
+ }
+
+ window.Cl.FocalPoint = FocalPoint;
+ window.Cl.FocalPointConstructor = FocalPointConstructor;
+
+ // Export for ES6 module usage
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = FocalPoint;
+ }
+})();
+
+export default window.Cl.FocalPoint;
diff --git a/filer/static/filer/js/addons/popup_handling.js b/filer/static/filer/js/addons/popup_handling.js
new file mode 100644
index 000000000..453a00a93
--- /dev/null
+++ b/filer/static/filer/js/addons/popup_handling.js
@@ -0,0 +1,137 @@
+'use strict';
+
+const windowname_to_id = (text) => {
+ text = text.replace(/__dot__/g, '.');
+ text = text.replace(/__dash__/g, '-');
+ const last = text.lastIndexOf('__');
+ return last === -1 ? text : text.substring(0, last);
+};
+
+window.dismissPopupAndReload = (win) => {
+ document.location.reload();
+ win.close();
+};
+
+window.dismissRelatedImageLookupPopup = (
+ win,
+ chosenId,
+ chosenThumbnailUrl,
+ chosenDescriptionTxt,
+ chosenAdminChangeUrl
+) => {
+ const id = windowname_to_id(win.name);
+ const lookup = document.getElementById(id);
+ if (!lookup) {
+ return;
+ }
+ const container = lookup.closest('.filerFile');
+ if (!container) {
+ return;
+ }
+ const edit = container.querySelector('.edit');
+ const image = container.querySelector('.thumbnail_img');
+ const descriptionText = container.querySelector('.description_text');
+ const clearer = container.querySelector('.filerClearer');
+ const dropzoneMessage = container.parentElement.querySelector('.dz-message');
+ const element = container.querySelector('input');
+ const oldId = element.value;
+
+ element.value = chosenId;
+ const dropzone = element.closest('.js-filer-dropzone');
+ if (dropzone) {
+ dropzone.classList.add('js-object-attached');
+ }
+ if (chosenThumbnailUrl && image) {
+ image.src = chosenThumbnailUrl;
+ image.classList.remove('hidden');
+ image.removeAttribute('srcset');
+ }
+ if (descriptionText) {
+ descriptionText.textContent = chosenDescriptionTxt;
+ }
+ if (clearer) {
+ clearer.classList.remove('hidden');
+ }
+ lookup.classList.add('related-lookup-change');
+ if (edit) {
+ edit.classList.add('related-lookup-change');
+ }
+ if (chosenAdminChangeUrl && edit) {
+ edit.setAttribute('href', `${chosenAdminChangeUrl}?_edit_from_widget=1`);
+ }
+ if (dropzoneMessage) {
+ dropzoneMessage.classList.add('hidden');
+ }
+
+ if (oldId !== chosenId) {
+ element.dispatchEvent(new Event('change', { bubbles: true }));
+ }
+ win.close();
+};
+window.dismissRelatedFolderLookupPopup = (win, chosenId, chosenName) => {
+ const id = windowname_to_id(win.name);
+ const lookup = document.getElementById(id);
+ if (!lookup) {
+ return;
+ }
+ const container = lookup.closest('.filerFile');
+ if (!container) {
+ return;
+ }
+ const image = container.querySelector('.thumbnail_img');
+ const clearButton = document.getElementById(`id_${id}_clear`);
+ const input = document.getElementById(`id_${id}`);
+ const folderName = container.querySelector('.description_text');
+ const addFolderButton = document.getElementById(id);
+
+ if (input) {
+ input.value = chosenId;
+ }
+ if (image) {
+ image.classList.remove('hidden');
+ }
+ if (folderName) {
+ folderName.textContent = chosenName;
+ }
+ if (clearButton) {
+ clearButton.classList.remove('hidden');
+ }
+ if (addFolderButton) {
+ addFolderButton.classList.add('hidden');
+ }
+ win.close();
+};
+
+// Handle popup dismiss links (for folder/image selection in popups)
+document.addEventListener('DOMContentLoaded', () => {
+ document.querySelectorAll('.js-dismiss-popup').forEach((link) => {
+ link.addEventListener('click', function (e) {
+ e.preventDefault();
+
+ const fileId = this.dataset.fileId;
+ const iconUrl = this.dataset.iconUrl;
+ const label = this.dataset.label;
+
+ if (this.classList.contains('js-dismiss-image')) {
+ const changeUrl = this.dataset.changeUrl || '';
+ window.opener.dismissRelatedImageLookupPopup(
+ window,
+ fileId,
+ iconUrl,
+ label,
+ changeUrl
+ );
+ } else if (this.classList.contains('js-dismiss-folder')) {
+ window.opener.dismissRelatedFolderLookupPopup(window, fileId, label);
+ }
+ });
+ });
+
+ // Auto-dismiss popup on page load (for dismiss_popup.html)
+ const popupData = document.getElementById('popup-dismiss-data');
+ if (popupData && window.opener) {
+ const pk = popupData.dataset.pk;
+ const label = popupData.dataset.label;
+ window.opener.dismissRelatedPopup(window, pk, label);
+ }
+});
diff --git a/filer/static/filer/js/addons/table-dropzone.js b/filer/static/filer/js/addons/table-dropzone.js
new file mode 100644
index 000000000..934a3e663
--- /dev/null
+++ b/filer/static/filer/js/addons/table-dropzone.js
@@ -0,0 +1,282 @@
+// #DROPZONE#
+// This script implements the dropzone settings
+'use strict';
+
+import Dropzone from 'dropzone';
+
+
+/* globals Cl */
+document.addEventListener('DOMContentLoaded', () => {
+ let submitNum = 0;
+ let maxSubmitNum = 0;
+ const dropzoneInstances = [];
+ const dropzoneBase = document.querySelector('.js-filer-dropzone-base');
+ const dropzoneSelector = '.js-filer-dropzone';
+ let dropzones;
+ const infoMessageClass = 'js-filer-dropzone-info-message';
+ const infoMessage = document.querySelector(`.${infoMessageClass}`);
+ const folderName = document.querySelector('.js-filer-dropzone-folder-name');
+ const uploadInfoContainer = document.querySelector('.js-filer-dropzone-upload-info-container');
+ const uploadInfo = document.querySelector('.js-filer-dropzone-upload-info');
+ const uploadWelcome = document.querySelector('.js-filer-dropzone-upload-welcome');
+ const uploadNumber = document.querySelector('.js-filer-dropzone-upload-number');
+ const uploadCount = document.querySelector('.js-filer-upload-count');
+ const uploadText = document.querySelector('.js-filer-upload-text');
+ const uploadFileNameSelector = '.js-filer-dropzone-file-name';
+ const uploadProgressSelector = '.js-filer-dropzone-progress';
+ const uploadSuccess = document.querySelector('.js-filer-dropzone-upload-success');
+ const uploadCanceled = document.querySelector('.js-filer-dropzone-upload-canceled');
+ const cancelUpload = document.querySelector('.js-filer-dropzone-cancel');
+ const dragHoverClass = 'dz-drag-hover';
+ const dataUploaderConnections = 'max-uploader-connections';
+ const dragHoverBorder = document.querySelector('.drag-hover-border');
+ const hiddenClass = 'hidden';
+ let hideMessageTimeout;
+ let hasErrors = false;
+ let baseUrl;
+ let baseFolderTitle;
+
+ const updateUploadNumber = () => {
+ if (uploadNumber) {
+ uploadNumber.textContent = `${maxSubmitNum - submitNum}/${maxSubmitNum}`;
+ }
+ if (uploadText) {
+ uploadText.classList.remove('hidden');
+ }
+ if (uploadCount) {
+ uploadCount.classList.remove('hidden');
+ }
+ };
+
+ const destroyDropzones = () => {
+ dropzoneInstances.forEach((instance) => {
+ instance.destroy();
+ });
+ };
+
+ const getElementByFile = (file, url) => {
+ return document.getElementById(
+ `file-${encodeURIComponent(file.name)}${file.size}${file.lastModified}${url}`
+ );
+ };
+
+ if (dropzoneBase) {
+ baseUrl = dropzoneBase.dataset.url;
+ baseFolderTitle = dropzoneBase.dataset.folderName;
+
+ const body = document.body;
+ body.dataset.url = baseUrl;
+ body.dataset.folderName = baseFolderTitle;
+ body.dataset.maxFiles = dropzoneBase.dataset.maxFiles;
+ body.dataset.maxFilesize = dropzoneBase.dataset.maxFiles;
+ body.classList.add('js-filer-dropzone');
+ }
+
+ Cl.mediator.subscribe('filer-upload-in-progress', destroyDropzones);
+
+ dropzones = document.querySelectorAll(dropzoneSelector);
+
+ if (dropzones.length && Dropzone) {
+ Dropzone.autoDiscover = false;
+ dropzones.forEach((dropzoneElement) => {
+ const dropzoneUrl = dropzoneElement.dataset.url;
+ const dropzoneInstance = new Dropzone(dropzoneElement, {
+ url: dropzoneUrl,
+ paramName: 'file',
+ maxFiles: parseInt(dropzoneElement.dataset.maxFiles) || 100,
+ maxFilesize: parseInt(dropzoneElement.dataset.maxFilesize), // no default
+ previewTemplate: '
',
+ clickable: false,
+ addRemoveLinks: false,
+ parallelUploads: dropzoneElement.dataset[dataUploaderConnections] || 3,
+ accept: (file, done) => {
+ let uploadInfoClone;
+
+ Cl.mediator.remove('filer-upload-in-progress', destroyDropzones);
+ Cl.mediator.publish('filer-upload-in-progress');
+
+ clearTimeout(hideMessageTimeout);
+ clearTimeout(hideMessageTimeout);
+ if (uploadWelcome) {
+ uploadWelcome.classList.add(hiddenClass);
+ }
+ if (cancelUpload) {
+ cancelUpload.classList.remove(hiddenClass);
+ }
+
+ if (getElementByFile(file, dropzoneUrl)) {
+ done('duplicate');
+ } else {
+ uploadInfoClone = uploadInfo.cloneNode(true);
+
+ const fileNameEl = uploadInfoClone.querySelector(uploadFileNameSelector);
+ if (fileNameEl) {
+ fileNameEl.textContent = file.name;
+ }
+ const progressEl = uploadInfoClone.querySelector(uploadProgressSelector);
+ if (progressEl) {
+ progressEl.style.width = '0';
+ }
+ uploadInfoClone.setAttribute(
+ 'id',
+ `file-${encodeURIComponent(file.name)}${file.size}${file.lastModified}${dropzoneUrl}`
+ );
+ if (uploadInfoContainer) {
+ uploadInfoContainer.appendChild(uploadInfoClone);
+ }
+
+ submitNum++;
+ maxSubmitNum++;
+ updateUploadNumber();
+ done();
+ }
+
+ dropzones.forEach((dz) => dz.classList.remove('reset-hover'));
+ if (infoMessage) {
+ infoMessage.classList.remove(hiddenClass);
+ }
+ dropzones.forEach((dz) => dz.classList.remove(dragHoverClass));
+ },
+ dragover: (dragEvent) => {
+ const target = dragEvent.target.closest(dropzoneSelector);
+ const folderTitle = target?.dataset.folderName;
+ const dropzoneFolder = dropzoneElement.classList.contains('js-filer-dropzone-folder');
+ const dropzoneBoundingRect = dropzoneElement.getBoundingClientRect();
+ const borderStyle = dragHoverBorder ? window.getComputedStyle(dragHoverBorder) : null;
+ const topBorderSize = borderStyle ? borderStyle.borderTopWidth : '0px';
+ const leftBorderSize = borderStyle ? borderStyle.borderLeftWidth : '0px';
+ const dropzonePosition = {
+ top: `${dropzoneBoundingRect.top}px`,
+ bottom: `${dropzoneBoundingRect.bottom}px`,
+ left: `${dropzoneBoundingRect.left}px`,
+ right: `${dropzoneBoundingRect.right}px`,
+ width: `${dropzoneBoundingRect.width - parseInt(leftBorderSize, 10) * 2}px`,
+ height: `${dropzoneBoundingRect.height - parseInt(topBorderSize, 10) * 2}px`,
+ display: 'block'
+ };
+ if (dropzoneFolder && dragHoverBorder) {
+ Object.assign(dragHoverBorder.style, dropzonePosition);
+ }
+
+ dropzones.forEach((dz) => dz.classList.add('reset-hover'));
+ if (uploadSuccess) {
+ uploadSuccess.classList.add(hiddenClass);
+ }
+ if (infoMessage) {
+ infoMessage.classList.remove(hiddenClass);
+ }
+ dropzoneElement.classList.add(dragHoverClass);
+ dropzoneElement.classList.remove('reset-hover');
+
+ if (folderName && folderTitle) {
+ folderName.textContent = folderTitle;
+ }
+ },
+ dragend: () => {
+ clearTimeout(hideMessageTimeout);
+ hideMessageTimeout = setTimeout(() => {
+ if (infoMessage) {
+ infoMessage.classList.add(hiddenClass);
+ }
+ }, 1000);
+
+ if (infoMessage) {
+ infoMessage.classList.remove(hiddenClass);
+ }
+ dropzones.forEach((dz) => dz.classList.remove(dragHoverClass));
+ if (dragHoverBorder) {
+ Object.assign(dragHoverBorder.style, { top: '0', bottom: '0', width: '0', height: '0' });
+ }
+ },
+ dragleave: () => {
+ clearTimeout(hideMessageTimeout);
+ hideMessageTimeout = setTimeout(() => {
+ if (infoMessage) {
+ infoMessage.classList.add(hiddenClass);
+ }
+ }, 1000);
+
+ if (infoMessage) {
+ infoMessage.classList.remove(hiddenClass);
+ }
+ dropzones.forEach((dz) => dz.classList.remove(dragHoverClass));
+ if (dragHoverBorder) {
+ Object.assign(dragHoverBorder.style, { top: '0', bottom: '0', width: '0', height: '0' });
+ }
+ },
+ sending: (file) => {
+ const fileEl = getElementByFile(file, dropzoneUrl);
+ if (fileEl) {
+ fileEl.classList.remove(hiddenClass);
+ }
+ },
+ uploadprogress: (file, progress) => {
+ const fileEl = getElementByFile(file, dropzoneUrl);
+ if (fileEl) {
+ const progressEl = fileEl.querySelector(uploadProgressSelector);
+ if (progressEl) {
+ progressEl.style.width = `${progress}%`;
+ }
+ }
+ },
+ success: (file) => {
+ submitNum--;
+ updateUploadNumber();
+ const fileEl = getElementByFile(file, dropzoneUrl);
+ if (fileEl) {
+ fileEl.remove();
+ }
+ },
+ queuecomplete: () => {
+ if (submitNum !== 0) {
+ return;
+ }
+
+ updateUploadNumber();
+
+ if (cancelUpload) {
+ cancelUpload.classList.add(hiddenClass);
+ }
+ if (uploadInfo) {
+ uploadInfo.classList.add(hiddenClass);
+ }
+
+ if (hasErrors) {
+ if (uploadNumber) {
+ uploadNumber.classList.add(hiddenClass);
+ }
+ setTimeout(() => {
+ window.location.reload();
+ }, 1000);
+ } else {
+ if (uploadSuccess) {
+ uploadSuccess.classList.remove(hiddenClass);
+ }
+ window.location.reload();
+ }
+ },
+ error: (file, error) => {
+ updateUploadNumber();
+ if (error === 'duplicate') {
+ return;
+ }
+ hasErrors = true;
+ if (window.filerShowError) {
+ window.filerShowError(`${file.name}: ${error.message}`);
+ }
+ }
+ });
+ dropzoneInstances.push(dropzoneInstance);
+ if (cancelUpload) {
+ cancelUpload.addEventListener('click', (clickEvent) => {
+ clickEvent.preventDefault();
+ cancelUpload.classList.add(hiddenClass);
+ if (uploadCanceled) {
+ uploadCanceled.classList.remove(hiddenClass);
+ }
+ dropzoneInstance.removeAllFiles(true);
+ });
+ }
+ });
+ }
+});
diff --git a/filer/static/filer/js/addons/toggler.js b/filer/static/filer/js/addons/toggler.js
new file mode 100644
index 000000000..fb02f47b2
--- /dev/null
+++ b/filer/static/filer/js/addons/toggler.js
@@ -0,0 +1,82 @@
+// #TOGGLER#
+// This script implements the simple element toggle
+'use strict';
+
+window.Cl = window.Cl || {};
+
+class Toggler {
+ constructor(options = {}) {
+ this.options = {
+ linksSelector: '.js-toggler-link',
+ dataHeaderSelector: 'toggler-header-selector',
+ dataContentSelector: 'toggler-content-selector',
+ collapsedClass: 'js-collapsed',
+ expandedClass: 'js-expanded',
+ hiddenClass: 'hidden',
+ ...options
+ };
+
+ this.togglerInstances = [];
+
+ const links = document.querySelectorAll(this.options.linksSelector);
+ links.forEach(link => {
+ const togglerInstance = new TogglerConstructor(link, this.options);
+ this.togglerInstances.push(togglerInstance);
+ });
+ }
+
+ destroy() {
+ this.links = null;
+ this.togglerInstances.forEach(togglerInstance => togglerInstance.destroy());
+ this.togglerInstances = [];
+ }
+}
+
+class TogglerConstructor {
+ constructor(link, options = {}) {
+ this.options = { ...options };
+ this.link = link;
+ this.headerSelector = this.link.dataset[this.options.dataHeaderSelector];
+ this.contentSelector = this.link.dataset[this.options.dataContentSelector];
+ this.header = document.querySelector(this.headerSelector);
+ this.header = this.header || this.link;
+ this.content = document.querySelector(this.contentSelector);
+
+ if (!this.content) {
+ return;
+ }
+
+ this._initLink();
+ }
+
+ _updateClasses() {
+ if (this.content.classList.contains(this.options.hiddenClass)) {
+ this.header.classList.remove(this.options.expandedClass);
+ this.header.classList.add(this.options.collapsedClass);
+ } else {
+ this.header.classList.add(this.options.expandedClass);
+ this.header.classList.remove(this.options.collapsedClass);
+ }
+ }
+
+ _onTogglerClick(clickEvent) {
+ this.content.classList.toggle(this.options.hiddenClass);
+ this._updateClasses();
+ clickEvent.preventDefault();
+ }
+
+ _initLink() {
+ this._updateClasses();
+ this.link.addEventListener('click', e => this._onTogglerClick(e));
+ }
+
+ destroy() {
+ this.options = null;
+ this.link = null;
+ }
+}
+
+Cl.Toggler = Toggler;
+Cl.TogglerConstructor = TogglerConstructor;
+
+export default Toggler;
diff --git a/filer/static/filer/js/addons/tooltip.js b/filer/static/filer/js/addons/tooltip.js
new file mode 100644
index 000000000..47bb041d2
--- /dev/null
+++ b/filer/static/filer/js/addons/tooltip.js
@@ -0,0 +1,40 @@
+'use strict';
+window.Cl = window.Cl || {};
+
+Cl.filerTooltip = () => {
+ const tooltipSelector = '.js-filer-tooltip';
+ const tooltips = document.querySelectorAll(tooltipSelector);
+
+ tooltips.forEach((element) => {
+ element.addEventListener('mouseover', function () {
+ const title = this.getAttribute('title');
+ if (!title) {
+ return;
+ }
+
+ this.dataset.filerTooltip = title;
+ this.removeAttribute('title');
+
+ const tooltip = document.createElement('p');
+ tooltip.className = 'filer-tooltip';
+ tooltip.textContent = title;
+
+ const container = document.querySelector(tooltipSelector);
+ if (container) {
+ container.appendChild(tooltip);
+ }
+ });
+
+ element.addEventListener('mouseout', function () {
+ const title = this.dataset.filerTooltip;
+ if (title) {
+ this.setAttribute('title', title);
+ }
+
+ const existingTooltips = document.querySelectorAll('.filer-tooltip');
+ existingTooltips.forEach((t) => {
+ t.remove();
+ });
+ });
+ });
+};
diff --git a/filer/static/filer/js/addons/upload-button.js b/filer/static/filer/js/addons/upload-button.js
new file mode 100644
index 000000000..eb0456c22
--- /dev/null
+++ b/filer/static/filer/js/addons/upload-button.js
@@ -0,0 +1,242 @@
+// #UPLOAD BUTTON#
+// This script implements the upload button logic
+'use strict';
+
+import Dropzone from 'dropzone';
+
+/* globals Cl */
+
+document.addEventListener('DOMContentLoaded', () => {
+ let submitNum = 0;
+ let maxSubmitNum = 1;
+ const uploadButton = document.querySelector('.js-upload-button');
+ if (!uploadButton) {
+ return;
+ }
+
+ const uploadButtonDisabled = document.querySelector('.js-upload-button-disabled');
+ const uploadUrl = uploadButton.dataset.url;
+ const uploadWelcome = document.querySelector('.js-filer-dropzone-upload-welcome');
+ const uploadInfoContainer = document.querySelector('.js-filer-dropzone-upload-info-container');
+ const uploadInfo = document.querySelector('.js-filer-dropzone-upload-info');
+ const uploadNumber = document.querySelector('.js-filer-dropzone-upload-number');
+ const uploadFileNameSelector = '.js-filer-dropzone-file-name';
+ const uploadProgressSelector = '.js-filer-dropzone-progress';
+ const uploadSuccess = document.querySelector('.js-filer-dropzone-upload-success');
+ const uploadCanceled = document.querySelector('.js-filer-dropzone-upload-canceled');
+ const uploadCancel = document.querySelector('.js-filer-dropzone-cancel');
+ const infoMessage = document.querySelector('.js-filer-dropzone-info-message');
+ const hiddenClass = 'hidden';
+ const maxUploaderConnections = parseInt(uploadButton.dataset.maxUploaderConnections || 3, 10);
+ const maxFilesize = parseInt(uploadButton.dataset.maxFilesize || 0, 10);
+ let hasErrors = false;
+
+ const updateUploadNumber = () => {
+ if (uploadNumber) {
+ uploadNumber.textContent = `${maxSubmitNum - submitNum}/${maxSubmitNum}`;
+ }
+ };
+
+ const removeButton = () => {
+ if (uploadButton) {
+ uploadButton.remove();
+ }
+ };
+
+ // utility
+ const updateQuery = (uri, key, value) => {
+ const re = new RegExp(`([?&])${key}=.*?(&|$)`, 'i');
+ const separator = uri.indexOf('?') !== -1 ? '&' : '?';
+ const hash = window.location.hash;
+ uri = uri.replace(/#.*$/, '');
+ if (uri.match(re)) {
+ return uri.replace(re, `$1${key}=${value}$2`) + hash;
+ } else {
+ return uri + separator + key + '=' + value + hash;
+ }
+ };
+
+ const reloadOrdered = () => {
+ const uri = window.location.toString();
+ window.location.replace(updateQuery(uri, 'order_by', '-modified_at'));
+ };
+
+ Cl.mediator.subscribe('filer-upload-in-progress', removeButton);
+
+ // Initialize Dropzone on the upload button
+ Dropzone.autoDiscover = false;
+ const dropzone = new Dropzone(uploadButton, {
+ url: uploadUrl,
+ paramName: 'file',
+ maxFilesize: maxFilesize, // already in MB
+ parallelUploads: maxUploaderConnections,
+ clickable: uploadButton,
+ previewTemplate: '
',
+ addRemoveLinks: false,
+ autoProcessQueue: true
+ });
+
+ dropzone.on('addedfile', () => {
+ Cl.mediator.remove('filer-upload-in-progress', removeButton);
+ Cl.mediator.publish('filer-upload-in-progress');
+ submitNum++;
+
+ maxSubmitNum = dropzone.files.length;
+
+ if (infoMessage) {
+ infoMessage.classList.remove(hiddenClass);
+ }
+ if (uploadWelcome) {
+ uploadWelcome.classList.add(hiddenClass);
+ }
+ if (uploadSuccess) {
+ uploadSuccess.classList.add(hiddenClass);
+ }
+ if (uploadInfoContainer) {
+ uploadInfoContainer.classList.remove(hiddenClass);
+ }
+ if (uploadCancel) {
+ uploadCancel.classList.remove(hiddenClass);
+ }
+ if (uploadCanceled) {
+ uploadCanceled.classList.add(hiddenClass);
+ }
+
+ updateUploadNumber();
+ });
+
+ dropzone.on('uploadprogress', (file, progress) => {
+ const percent = Math.round(progress);
+ const fileId = `file-${encodeURIComponent(file.name)}${file.size}${file.lastModified}`;
+ const fileItem = document.getElementById(fileId);
+ let uploadInfoClone;
+
+ if (fileItem) {
+ const progressBar = fileItem.querySelector(uploadProgressSelector);
+ if (progressBar) {
+ progressBar.style.width = `${percent}%`;
+ }
+ } else if (uploadInfo) {
+ uploadInfoClone = uploadInfo.cloneNode(true);
+
+ const fileNameEl = uploadInfoClone.querySelector(uploadFileNameSelector);
+ if (fileNameEl) {
+ fileNameEl.textContent = file.name;
+ }
+ const progressEl = uploadInfoClone.querySelector(uploadProgressSelector);
+ if (progressEl) {
+ progressEl.style.width = `${percent}%`;
+ }
+ uploadInfoClone.classList.remove(hiddenClass);
+ uploadInfoClone.setAttribute('id', fileId);
+ if (uploadInfoContainer) {
+ uploadInfoContainer.appendChild(uploadInfoClone);
+ }
+ }
+ });
+
+ dropzone.on('success', (file, response) => {
+ const fileId = `file-${encodeURIComponent(file.name)}${file.size}${file.lastModified}`;
+ const fileEl = document.getElementById(fileId);
+ if (fileEl) {
+ fileEl.remove();
+ }
+
+ if (response.error) {
+ hasErrors = true;
+ window.filerShowError(`${file.name}: ${response.error}`);
+ }
+
+ submitNum--;
+ updateUploadNumber();
+
+ if (submitNum === 0) {
+ maxSubmitNum = 1;
+
+ if (uploadWelcome) {
+ uploadWelcome.classList.add(hiddenClass);
+ }
+ if (uploadNumber) {
+ uploadNumber.classList.add(hiddenClass);
+ }
+ if (uploadCanceled) {
+ uploadCanceled.classList.add(hiddenClass);
+ }
+ if (uploadCancel) {
+ uploadCancel.classList.add(hiddenClass);
+ }
+ if (uploadSuccess) {
+ uploadSuccess.classList.remove(hiddenClass);
+ }
+
+ if (hasErrors) {
+ setTimeout(reloadOrdered, 1000);
+ } else {
+ reloadOrdered();
+ }
+ }
+ });
+
+ dropzone.on('error', (file, errorMessage) => {
+ const fileId = `file-${encodeURIComponent(file.name)}${file.size}${file.lastModified}`;
+ const fileEl = document.getElementById(fileId);
+ if (fileEl) {
+ fileEl.remove();
+ }
+
+ hasErrors = true;
+ window.filerShowError(`${file.name}: ${errorMessage}`);
+
+ submitNum--;
+ updateUploadNumber();
+
+ if (submitNum === 0) {
+ maxSubmitNum = 1;
+
+ if (uploadWelcome) {
+ uploadWelcome.classList.add(hiddenClass);
+ }
+ if (uploadNumber) {
+ uploadNumber.classList.add(hiddenClass);
+ }
+ if (uploadCanceled) {
+ uploadCanceled.classList.add(hiddenClass);
+ }
+ if (uploadCancel) {
+ uploadCancel.classList.add(hiddenClass);
+ }
+ if (uploadSuccess) {
+ uploadSuccess.classList.remove(hiddenClass);
+ }
+
+ setTimeout(reloadOrdered, 1000);
+ }
+ });
+
+ if (uploadCancel) {
+ uploadCancel.addEventListener('click', (clickEvent) => {
+ clickEvent.preventDefault();
+ uploadCancel.classList.add(hiddenClass);
+ if (uploadNumber) {
+ uploadNumber.classList.add(hiddenClass);
+ }
+ if (uploadInfoContainer) {
+ uploadInfoContainer.classList.add(hiddenClass);
+ }
+ if (uploadCanceled) {
+ uploadCanceled.classList.remove(hiddenClass);
+ }
+
+ setTimeout(() => {
+ window.location.reload();
+ }, 1000);
+ });
+ }
+
+ if (uploadButtonDisabled && Cl.filerTooltip) {
+ Cl.filerTooltip();
+ }
+
+ // Fire custom event after scripts have been executed
+ document.dispatchEvent(new Event('filer-upload-scripts-executed'));
+});
diff --git a/filer/static/filer/js/addons/widget.js b/filer/static/filer/js/addons/widget.js
new file mode 100644
index 000000000..d43015d19
--- /dev/null
+++ b/filer/static/filer/js/addons/widget.js
@@ -0,0 +1,56 @@
+'use strict';
+
+document.addEventListener('DOMContentLoaded', () => {
+ const filer_clear = (ev) => {
+ ev.preventDefault();
+
+ const clearer = ev.currentTarget;
+ const container = clearer.closest('.filerFile');
+ if (!container) {
+ return;
+ }
+
+ const input = container.querySelector('input');
+ const thumbnail = container.querySelector('.thumbnail_img');
+ const description = container.querySelector('.description_text');
+ const addImageButton = container.querySelector('.lookup');
+ const editImageButton = container.querySelector('.edit');
+ const dropzoneMessage = container.parentElement.querySelector('.dz-message');
+ const hiddenClass = 'hidden';
+
+ clearer.classList.add(hiddenClass);
+ if (input) {
+ input.value = '';
+ }
+ if (thumbnail) {
+ thumbnail.classList.add(hiddenClass);
+ var thumbnailLink = thumbnail.parentElement;
+ if (thumbnailLink.tagName === 'A') {
+ thumbnailLink.removeAttribute('href');
+ }
+ }
+ if (addImageButton) {
+ addImageButton.classList.remove('related-lookup-change');
+ }
+ if (editImageButton) {
+ editImageButton.classList.remove('related-lookup-change');
+ }
+ if (dropzoneMessage) {
+ dropzoneMessage.classList.remove(hiddenClass);
+ }
+ if (description) {
+ description.textContent = '';
+ }
+ };
+
+ const foreignKeyFields = document.querySelectorAll('.filerFile .vForeignKeyRawIdAdminField');
+ foreignKeyFields.forEach((field) => {
+ field.setAttribute('type', 'hidden');
+ });
+
+ // Remove any existing handlers and add new ones
+ const clearers = document.querySelectorAll('.filerFile .filerClearer');
+ clearers.forEach((clearer) => {
+ clearer.addEventListener('click', filer_clear);
+ });
+});
diff --git a/filer/static/filer/js/base.js b/filer/static/filer/js/base.js
new file mode 100644
index 000000000..81bd2b81e
--- /dev/null
+++ b/filer/static/filer/js/base.js
@@ -0,0 +1,417 @@
+// #####################################################################################################################
+// #BASE#
+// Basic logic django filer
+'use strict';
+
+import Mediator from 'mediator-js/lib/mediator';
+import FocalPoint from './addons/focal-point';
+import Toggler from './addons/toggler';
+
+window.Cl = window.Cl || {};
+Cl.mediator = new Mediator(); // mediator init
+Cl.FocalPoint = FocalPoint;
+Cl.Toggler = Toggler;
+
+
+document.addEventListener('DOMContentLoaded', () => {
+ let showErrorTimeout;
+
+ window.filerShowError = (message) => {
+ const messages = document.querySelector('.messagelist');
+ const header = document.querySelector('#header');
+ const filerErrorClass = 'js-filer-error';
+ const tpl = ``;
+ const msg = tpl.replace('{msg}', message);
+
+ if (messages) {
+ messages.outerHTML = msg;
+ } else if (header) {
+ header.insertAdjacentHTML('afterend', msg);
+ }
+
+ if (showErrorTimeout) {
+ clearTimeout(showErrorTimeout);
+ }
+
+ showErrorTimeout = setTimeout(() => {
+ const errorEl = document.querySelector(`.${filerErrorClass}`);
+ if (errorEl) {
+ errorEl.remove();
+ }
+ }, 5000);
+ };
+
+ const filterFiles = document.querySelector('.js-filter-files');
+ if (filterFiles) {
+ filterFiles.addEventListener('focus', (event) => {
+ const container = event.target.closest('.navigator-top-nav');
+ if (container) {
+ container.classList.add('search-is-focused');
+ }
+ });
+
+ filterFiles.addEventListener('blur', (event) => {
+ const container = event.target.closest('.navigator-top-nav');
+ if (container) {
+ const dropdownTrigger = container.querySelector('.dropdown-container a');
+ if (!dropdownTrigger || event.relatedTarget !== dropdownTrigger) {
+ container.classList.remove('search-is-focused');
+ }
+ }
+ });
+ }
+
+ // Focus on the search field on page load
+ (() => {
+ const filter = document.querySelector('.js-filter-files');
+ const containerSelector = '.navigator-top-nav';
+ const container = document.querySelector(containerSelector);
+ const searchDropdown = container?.querySelector('.filter-search-wrapper .filer-dropdown-container');
+
+ if (filter) {
+ filter.addEventListener('keydown', function () {
+ const navContainer = this.closest(containerSelector);
+ if (navContainer) {
+ navContainer.classList.add('search-is-focused');
+ }
+ });
+
+ if (searchDropdown) {
+ searchDropdown.addEventListener('show.bs.filer-dropdown', () => {
+ if (container) {
+ container.classList.add('search-is-focused');
+ }
+ });
+ searchDropdown.addEventListener('hide.bs.filer-dropdown', () => {
+ if (container) {
+ container.classList.remove('search-is-focused');
+ }
+ });
+ }
+ }
+ })();
+
+ // show counter if file is selected
+ (() => {
+ const navigatorTable = document.querySelectorAll('.navigator-table tr, .navigator-list .list-item');
+ const actionList = document.querySelector('.actions-wrapper');
+ const actionSelect = document.querySelectorAll(
+ '.action-select, #action-toggle, #files-action-toggle, #folders-action-toggle, .actions .clear a'
+ );
+
+ // timeout is needed to wait until table row has class selected.
+ setTimeout(() => {
+ // Set classes for checked items
+ actionSelect.forEach((el) => {
+ if (el.checked) {
+ const listItem = el.closest('.list-item');
+ if (listItem) {
+ listItem.classList.add('selected');
+ }
+ }
+ });
+ const hasSelected = Array.from(navigatorTable).some((el) =>
+ el.classList.contains('selected')
+ );
+ if (hasSelected && actionList) {
+ actionList.classList.add('action-selected');
+ }
+ }, 100);
+
+ actionSelect.forEach((el) => {
+ el.addEventListener('change', function () {
+ // Mark element selected (for table view this is done by Django admin js - we do it ourselves
+ const listItem = this.closest('.list-item');
+ if (listItem) {
+ if (this.checked) {
+ listItem.classList.add('selected');
+ } else {
+ listItem.classList.remove('selected');
+ }
+ }
+ // setTimeout makes sure that change event fires before click event which is reliable to admin
+ setTimeout(() => {
+ const hasSelected = Array.from(navigatorTable).some((el) =>
+ el.classList.contains('selected')
+ );
+ if (actionList) {
+ if (hasSelected) {
+ actionList.classList.add('action-selected');
+ } else {
+ actionList.classList.remove('action-selected');
+ }
+ }
+ }, 0);
+ });
+ });
+ })();
+
+ (() => {
+ const actionsMenu = document.querySelector('.js-actions-menu');
+ if (!actionsMenu) {
+ return;
+ }
+
+ const dropdown = actionsMenu.querySelector('.filer-dropdown-menu');
+ const actionsSelect = document.querySelector('.actions select[name="action"]');
+ const actionsSelectOptions = actionsSelect?.querySelectorAll('option') || [];
+ const actionsGo = document.querySelector('.actions button[type="submit"]');
+ const actionDelete = document.querySelector('.js-action-delete');
+ const actionCopy = document.querySelector('.js-action-copy');
+ const actionMove = document.querySelector('.js-action-move');
+ const valueDelete = 'delete_files_or_folders';
+ const valueCopy = 'copy_files_and_folders';
+ const valueMove = 'move_files_and_folders';
+ const navigatorTable = document.querySelectorAll('.navigator-table tr, .navigator-list .list-item');
+
+ // triggers delete copy and move actions on separate buttons
+ const actionsButton = (optionValue, actionButton) => {
+ if (!actionButton) {
+ return;
+ }
+ actionsSelectOptions.forEach((option) => {
+ if (option.value === optionValue) {
+ actionButton.style.display = '';
+ actionButton.addEventListener('click', (e) => {
+ e.preventDefault();
+ const hasSelected = Array.from(navigatorTable).some((el) =>
+ el.classList.contains('selected')
+ );
+ if (hasSelected && actionsSelect && actionsGo) {
+ actionsSelect.value = optionValue;
+ const targetOption = actionsSelect.querySelector(`option[value="${optionValue}"]`);
+ if (targetOption) {
+ targetOption.selected = true;
+ }
+ actionsGo.click();
+ }
+ });
+ }
+ });
+ };
+ actionsButton(valueDelete, actionDelete);
+ actionsButton(valueCopy, actionCopy);
+ actionsButton(valueMove, actionMove);
+
+ // mocking the action buttons to work in frontend UI
+ actionsSelectOptions.forEach((option, index) => {
+ if (index !== 0) {
+ const li = document.createElement('li');
+ const a = document.createElement('a');
+ a.href = '#';
+ a.textContent = option.textContent;
+
+ if (option.value === valueDelete || option.value === valueCopy || option.value === valueMove) {
+ a.classList.add('hidden');
+ }
+
+ li.appendChild(a);
+ if (dropdown) {
+ dropdown.appendChild(li);
+ }
+ }
+ });
+ if (dropdown) {
+
+ dropdown.addEventListener('click', (clickEvent) => {
+ if (clickEvent.target.tagName === 'A') {
+ const li = clickEvent.target.closest('li');
+ const targetIndex = Array.from(dropdown.querySelectorAll('li')).indexOf(li) + 1;
+
+ clickEvent.preventDefault();
+
+ if (actionsSelect && actionsGo) {
+ const options = actionsSelect.querySelectorAll('option');
+ if (options[targetIndex]) {
+ options[targetIndex].selected = true;
+ }
+ actionsGo.click();
+ }
+ }
+ });
+ }
+
+ actionsMenu.addEventListener('click', (e) => {
+ const hasSelected = Array.from(navigatorTable).some((el) =>
+ el.classList.contains('selected')
+ );
+ if (!hasSelected) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ });
+ })();
+
+ // breaks header if breadcrumbs name reaches a width of 80px
+ (() => {
+ const minBreadcrumbWidth = 80;
+ const header = document.querySelector('.navigator-top-nav');
+
+ if (!header) {
+ return;
+ }
+
+ const breadcrumbContainer = document.querySelector('.breadcrumbs-container');
+ if (!breadcrumbContainer) {
+ return;
+ }
+
+ const breadcrumbFolder = breadcrumbContainer.querySelector('.navigator-breadcrumbs');
+ const breadcrumbDropdown = breadcrumbContainer.querySelector('.filer-dropdown-container');
+ const filterFilesContainer = document.querySelector('.filter-files-container');
+ const actionsWrapper = document.querySelector('.actions-wrapper');
+ const navigatorButtonWrapper = document.querySelector('.navigator-button-wrapper');
+
+ const breadcrumbFolderWidth = breadcrumbFolder?.offsetWidth || 0;
+ const breadcrumbDropdownWidth = breadcrumbDropdown?.offsetWidth || 0;
+ const searchWidth = filterFilesContainer?.offsetWidth || 0;
+ const actionsWidth = actionsWrapper?.offsetWidth || 0;
+ const buttonsWidth = navigatorButtonWrapper?.offsetWidth || 0;
+
+ const headerStyles = window.getComputedStyle(header);
+ const headerPadding = parseInt(headerStyles.paddingLeft, 10) + parseInt(headerStyles.paddingRight, 10);
+
+ let headerWidth = header.offsetWidth;
+ const fullHeaderWidth = minBreadcrumbWidth + breadcrumbFolderWidth +
+ breadcrumbDropdownWidth + searchWidth + actionsWidth + buttonsWidth + headerPadding;
+
+ const breadcrumbSizeHandlerClassName = 'breadcrumb-min-width';
+
+ const breadcrumbSizeHandler = () => {
+ if (headerWidth < fullHeaderWidth) {
+ header.classList.add(breadcrumbSizeHandlerClassName);
+ } else {
+ header.classList.remove(breadcrumbSizeHandlerClassName);
+ }
+ };
+
+ breadcrumbSizeHandler();
+
+ window.addEventListener('resize', () => {
+ headerWidth = header.offsetWidth;
+ breadcrumbSizeHandler();
+ });
+ })();
+ // thumbnail folder admin view
+ (() => {
+ const actionEls = document.querySelectorAll('.navigator-list .list-item input.action-select');
+ const foldersActionCheckboxes = '.navigator-list .navigator-folders-body .list-item input.action-select';
+ const filesActionCheckboxes = '.navigator-list .navigator-files-body .list-item input.action-select';
+ const allFilesToggle = document.querySelector('#files-action-toggle');
+ const allFoldersToggle = document.querySelector('#folders-action-toggle');
+
+ if (allFoldersToggle) {
+ allFoldersToggle.addEventListener('click', function () {
+ const checkboxes = document.querySelectorAll(foldersActionCheckboxes);
+ if (this.checked) {
+ checkboxes.forEach((cb) => {
+ if (!cb.checked) {
+ cb.click();
+ }
+ });
+ } else {
+ checkboxes.forEach((cb) => {
+ if (cb.checked) {
+ cb.click();
+ }
+ });
+ }
+ });
+ }
+
+ if (allFilesToggle) {
+ allFilesToggle.addEventListener('click', function () {
+ const checkboxes = document.querySelectorAll(filesActionCheckboxes);
+ if (this.checked) {
+ checkboxes.forEach((cb) => {
+ if (!cb.checked) {
+ cb.click();
+ }
+ });
+ } else {
+ checkboxes.forEach((cb) => {
+ if (cb.checked) {
+ cb.click();
+ }
+ });
+ }
+ });
+ }
+
+ actionEls.forEach((el) => {
+ el.addEventListener('click', function () {
+ const filesCheckboxes = document.querySelectorAll(filesActionCheckboxes);
+ const foldersCheckboxes = document.querySelectorAll(foldersActionCheckboxes);
+
+ if (!this.checked) {
+ const hasUncheckedFiles = Array.from(filesCheckboxes).some((cb) => !cb.checked);
+ const hasUncheckedFolders = Array.from(foldersCheckboxes).some((cb) => !cb.checked);
+
+ if (hasUncheckedFiles && allFilesToggle) {
+ allFilesToggle.checked = false;
+ }
+ if (hasUncheckedFolders && allFoldersToggle) {
+ allFoldersToggle.checked = false;
+ }
+ } else {
+ const allFilesChecked = Array.from(filesCheckboxes).every((cb) => cb.checked);
+ const allFoldersChecked = Array.from(foldersCheckboxes).every((cb) => cb.checked);
+
+ if (allFilesChecked && allFilesToggle) {
+ allFilesToggle.checked = true;
+ }
+ if (allFoldersChecked && allFoldersToggle) {
+ allFoldersToggle.checked = true;
+ }
+ }
+ });
+ });
+
+ const clearLink = document.querySelector('.navigator .actions .clear a');
+ if (clearLink) {
+ clearLink.addEventListener('click', () => {
+ if (allFoldersToggle) {
+ allFoldersToggle.checked = false;
+ }
+ if (allFilesToggle) {
+ allFilesToggle.checked = false;
+ }
+ });
+ }
+ })();
+
+ const copyUrlButtons = document.querySelectorAll('.js-copy-url');
+ copyUrlButtons.forEach((button) => {
+ button.addEventListener('click', function (e) {
+ const url = new URL(this.dataset.url, document.location.href);
+ const msg = this.dataset.msg || 'URL copied to clipboard';
+ const infobox = document.createElement('template');
+ e.preventDefault();
+
+ const existingTooltips = document.querySelectorAll('.info.filer-tooltip');
+ existingTooltips.forEach((el) => {
+ el.remove();
+ });
+
+ navigator.clipboard.writeText(url.href);
+ infobox.innerHTML = `${msg}
`;
+ this.classList.add('filer-tooltip-wrapper');
+ this.appendChild(infobox.content.firstChild);
+
+ const self = this;
+ setTimeout(() => {
+ const tooltip = self.querySelector('.info');
+ if (tooltip) {
+ tooltip.remove();
+ }
+ }, 1200);
+ });
+ });
+
+ // Initialize FocalPoint
+ const focalPoint = new FocalPoint();
+ focalPoint.initialize();
+
+ // Initialize Toggler (auto-initializes in constructor)
+ new Toggler();
+});
diff --git a/filer/static/filer/js/widgets/admin-file-widget.js b/filer/static/filer/js/widgets/admin-file-widget.js
new file mode 100644
index 000000000..3e0c38f19
--- /dev/null
+++ b/filer/static/filer/js/widgets/admin-file-widget.js
@@ -0,0 +1,30 @@
+// Admin File Widget JavaScript
+'use strict';
+
+document.addEventListener('DOMContentLoaded', () => {
+ // Find all file widgets and clean up "add new" buttons
+ const cleanupAddButtons = () => {
+ document.querySelectorAll('.filer-widget').forEach((widget) => {
+ const hiddenInput = widget.querySelector('input[type="text"][id]');
+ if (hiddenInput) {
+ const widgetId = hiddenInput.id;
+ const addButton = document.querySelector(`#add_${widgetId}`);
+ if (addButton) {
+ addButton.remove();
+ }
+ }
+ });
+ };
+
+ cleanupAddButtons();
+
+ // Also handle dynamically added widgets (e.g., in inline formsets)
+ const observer = new MutationObserver(() => {
+ cleanupAddButtons();
+ });
+
+ observer.observe(document.body, {
+ childList: true,
+ subtree: true
+ });
+});
diff --git a/filer/static/filer/js/widgets/admin-folder-widget.js b/filer/static/filer/js/widgets/admin-folder-widget.js
new file mode 100644
index 000000000..14c5d2206
--- /dev/null
+++ b/filer/static/filer/js/widgets/admin-folder-widget.js
@@ -0,0 +1,64 @@
+// Admin Folder Widget JavaScript
+'use strict';
+
+document.addEventListener('DOMContentLoaded', () => {
+ const initFolderWidget = (widget) => {
+ const clearButton = widget.querySelector('.filerClearer');
+ const input = widget.querySelector('input[type="text"]');
+ const folderName = widget.querySelector('.description_text');
+ const thumbnailImg = widget.querySelector('.thumbnail_img');
+ const addFolderButton = widget.querySelector('.related-lookup');
+
+ if (!clearButton || !input) {
+ return;
+ }
+
+ // Avoid duplicate initialization
+ if (clearButton.dataset.initialized) {
+ return;
+ }
+ clearButton.dataset.initialized = 'true';
+
+ clearButton.addEventListener('click', (e) => {
+ e.preventDefault();
+
+ if (folderName) {
+ folderName.textContent = '';
+ }
+ if (input) {
+ input.removeAttribute('value');
+ input.value = '';
+ }
+ if (thumbnailImg) {
+ thumbnailImg.classList.add('hidden');
+ }
+ clearButton.classList.add('hidden');
+ if (addFolderButton) {
+ addFolderButton.classList.remove('hidden');
+ }
+ });
+ };
+
+ // Initialize all folder widgets
+ document.querySelectorAll('.filer-dropzone-folder').forEach(initFolderWidget);
+
+ // Handle dynamically added widgets (e.g., in inline formsets)
+ const observer = new MutationObserver((mutations) => {
+ mutations.forEach((mutation) => {
+ mutation.addedNodes.forEach((node) => {
+ if (node.nodeType === 1) { // Element node
+ if (node.classList?.contains('filer-dropzone-folder')) {
+ initFolderWidget(node);
+ }
+ // Also check child nodes
+ node.querySelectorAll?.('.filer-dropzone-folder').forEach(initFolderWidget);
+ }
+ });
+ });
+ });
+
+ observer.observe(document.body, {
+ childList: true,
+ subtree: true
+ });
+});
diff --git a/filer/templates/admin/filer/actions.html b/filer/templates/admin/filer/actions.html
index f99c06459..a0b01fbd7 100644
--- a/filer/templates/admin/filer/actions.html
+++ b/filer/templates/admin/filer/actions.html
@@ -1,25 +1,19 @@
{% load i18n %}
-
-
-
- {% for field in action_form %}
- {% if field.label %}
-
{{ field.label }}
- {% endif %}
- {{ field }}
- {% endfor %}
-
{% trans "Go" %}
- {% if actions_selection_counter %}
-
-
-
{{ selection_note }}
- {% if paginator.count != paginated_items.object_list|length %}
-
{{ selection_note_all }}
-
{% trans "Clear selection" %}
- {% endif %}
-
- {% endif %}
-
-
+
diff --git a/filer/templates/admin/filer/base_site.html b/filer/templates/admin/filer/base_site.html
index 0217933b8..2a66e751d 100644
--- a/filer/templates/admin/filer/base_site.html
+++ b/filer/templates/admin/filer/base_site.html
@@ -1,10 +1,17 @@
{% extends "admin/base_site.html" %}
-{% load i18n filermedia %}
+{% load i18n static filer_admin_tags %}
+
{% block extrastyle %}
-
-
-
-
-
+ {{ block.super }}
+
+ {% icon_css_library %}
{% endblock %}
+{% block extrahead %}
+ {{ block.super }}
+
+ {# upload stuff #}
+ {{ media.js }}
+
+
+{% endblock %}
diff --git a/filer/templates/admin/filer/breadcrumbs.html b/filer/templates/admin/filer/breadcrumbs.html
index a74b6e4bf..a8dceac9d 100644
--- a/filer/templates/admin/filer/breadcrumbs.html
+++ b/filer/templates/admin/filer/breadcrumbs.html
@@ -1,41 +1,24 @@
-{% load i18n %}
+{% load i18n filer_admin_tags %}
+
-
+ › {{ breadcrumbs_action }}
+ {% else %}
+ › {% if instance.label %}{{ instance.label }}{% else %}{{ instance.name }}{% endif %}
+ {% endif %}
diff --git a/filer/templates/admin/filer/change_form.html b/filer/templates/admin/filer/change_form.html
index db9d83ded..34aeb85b7 100644
--- a/filer/templates/admin/filer/change_form.html
+++ b/filer/templates/admin/filer/change_form.html
@@ -1,78 +1,36 @@
{% extends "admin/change_form.html" %}
-{% load i18n admin_modify filermedia filer_admin_tags %}
-
-{% block extrahead %}{{ block.super }}
-
-{% endblock %}
-
-{% block pretitle %}
-{% if is_popup %}
-
-{% endif %}
-{% endblock %}
+{% load i18n admin_modify static filer_admin_tags %}
{% block breadcrumbs %}
-{% with original as instance %}
-{% include "admin/filer/breadcrumbs.html" %}
-{% endwith %}
+ {% with original as instance %}
+ {% include "admin/filer/breadcrumbs.html" %}
+ {% endwith %}
{% endblock %}
{% block extrastyle %}
-
-
-
-
-
+ {{ block.super }}
+
+ {% icon_css_library %}
{% endblock %}
-{% block coltype %}colMS row{% endblock %}
{% block after_field_sets %}
- {% if is_popup and select_folder %}
{% endif %}
-{% endblock %}
-
-{% block field_sets %}
- {% for fieldset in adminform %}
- {% include "admin/filer/fieldset.html" %}
- {% endfor %}
-{% endblock %}
-
-
-{% block content %}
-
- {{block.super}}
-
-{% endblock %}
-
-{% block object-tools %}
-{% if change %}{% if not is_popup %}
-
-{% endif %}{% endif %}
+ {% filer_admin_context_hidden_formfields %}
{% endblock %}
{% block sidebar %}
- {% with original.duplicates as duplicates %}
- {% if duplicates %}
-
-
{% trans 'duplicates' %}
-
-
- {% endif %}
- {% endwith %}
-{% endblock %}
-
-{% block submit_buttons_bottom %}
- {% if not original|is_restricted_for_user:user %}
- {% submit_row %}
- {% endif %}
+ {% block file_sidebar %}
+ {% with original.duplicates as duplicates %}
+ {% if duplicates %}
+
+
{% translate "Duplicates" %}
+
+
+ {% endif %}
+ {% endwith %}
+ {% endblock %}
{% endblock %}
diff --git a/filer/templates/admin/filer/delete_confirmation.html b/filer/templates/admin/filer/delete_confirmation.html
index 77e28c488..635fbfb05 100644
--- a/filer/templates/admin/filer/delete_confirmation.html
+++ b/filer/templates/admin/filer/delete_confirmation.html
@@ -1,37 +1,10 @@
-{% extends "admin/filer/base_site.html" %}
-{% load i18n %}
-{% load admin_urls %}
+{% extends "admin/delete_confirmation.html" %}
+{% load i18n static %}
-{% block breadcrumbs %}
-{% include "admin/filer/breadcrumbs.html" with instance=object breadcrumbs_action="Delete" %}
+{% block extrastyle %}{{ block.super }}
+
{% endblock %}
-{% block content %}
-{% if perms_lacking or protected %}
- {% if perms_lacking %}
-
{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}
-
- {% for obj in perms_lacking %}
- {{ obj }}
- {% endfor %}
-
- {% endif %}
- {% if protected %}
-
{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktrans %}
-
- {% for obj in protected %}
- {{ obj }}
- {% endfor %}
-
- {% endif %}
-{% else %}
-
{% blocktrans with escaped_object=object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}" ? All of the following related items will be deleted:{% endblocktrans %}
-
{{ deleted_objects|unordered_list }}
-
-{% endif %}
+{% block breadcrumbs %}
+ {% include "admin/filer/breadcrumbs.html" with instance=object breadcrumbs_action="Delete" %}
{% endblock %}
diff --git a/filer/templates/admin/filer/delete_selected_files_confirmation.html b/filer/templates/admin/filer/delete_selected_files_confirmation.html
index b7d96df2f..5c9da677e 100644
--- a/filer/templates/admin/filer/delete_selected_files_confirmation.html
+++ b/filer/templates/admin/filer/delete_selected_files_confirmation.html
@@ -1,4 +1,4 @@
-{% extends "admin/filer/base_site.html" %}
+{% extends "admin/delete_confirmation.html" %}
{% load i18n %}
{% block breadcrumbs %}
@@ -6,44 +6,46 @@
{% endblock %}
{% block content %}
-{% if perms_lacking or protected %}
- {% if perms_lacking %}
-
{% blocktrans %}Deleting the selected files and/or folders would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}
-
- {% for obj in perms_lacking %}
- {{ obj }}
+ {% if perms_lacking or protected %}
+ {% if perms_lacking %}
+ {% blocktrans %}Deleting the selected files and/or folders would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}
+
+ {% for obj in perms_lacking %}
+ {{ obj }}
+ {% endfor %}
+
+ {% endif %}
+ {% if protected %}
+ {% blocktrans %}Deleting the selected files and/or folders would require deleting the following protected related objects:{% endblocktrans %}
+
+ {% for obj in protected %}
+ {{ obj }}
+ {% endfor %}
+
+ {% endif %}
+ {% else %}
+ {% blocktrans %}Are you sure you want to delete the selected files and/or folders? All of the following objects and their related items will be deleted:{% endblocktrans %}
+ {% for deletable_object in deletable_objects %}
+ {{ deletable_object|unordered_list }}
{% endfor %}
-
+
{% endif %}
- {% if protected %}
-
{% blocktrans %}Deleting the selected files and/or folders would require deleting the following protected related objects:{% endblocktrans %}
-
- {% for obj in protected %}
- {{ obj }}
- {% endfor %}
-
- {% endif %}
-{% else %}
-
{% blocktrans %}Are you sure you want to delete the selected files and/or folders? All of the following objects and their related items will be deleted:{% endblocktrans %}
- {% for deletable_object in deletable_objects %}
-
{{ deletable_object|unordered_list }}
- {% endfor %}
-
-{% endif %}
{% endblock %}
diff --git a/filer/templates/admin/filer/dismiss_popup.html b/filer/templates/admin/filer/dismiss_popup.html
new file mode 100644
index 000000000..af648bc66
--- /dev/null
+++ b/filer/templates/admin/filer/dismiss_popup.html
@@ -0,0 +1,8 @@
+{% extends "admin/filer/base_site.html" %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+{% endblock %}
diff --git a/filer/templates/admin/filer/file/change_form.html b/filer/templates/admin/filer/file/change_form.html
new file mode 100644
index 000000000..a1d5b21fc
--- /dev/null
+++ b/filer/templates/admin/filer/file/change_form.html
@@ -0,0 +1,23 @@
+{% extends "admin/filer/change_form.html" %}
+{% load i18n admin_modify static %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+ {# upload stuff #}
+
+
+{% endblock %}
+
+
+{% block object-tools %}
+ {% if change and not is_popup %}
+
+ {% endif %}
+ {% include "admin/filer/tools/detail_info.html" %}
+{% endblock %}
diff --git a/filer/templates/admin/filer/file/popup_response.html b/filer/templates/admin/filer/file/popup_response.html
new file mode 100644
index 000000000..625659f3d
--- /dev/null
+++ b/filer/templates/admin/filer/file/popup_response.html
@@ -0,0 +1,10 @@
+{% extends "admin/filer/base_site.html" %}
+{% load static %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+{% endblock %}
diff --git a/filer/templates/admin/filer/folder/change_form.html b/filer/templates/admin/filer/folder/change_form.html
index 1550af60a..7d850eb47 100644
--- a/filer/templates/admin/filer/folder/change_form.html
+++ b/filer/templates/admin/filer/folder/change_form.html
@@ -1,36 +1,41 @@
-{% extends "admin/filer/change_form.html" %}
-{% load i18n admin_modify filermedia filer_admin_tags %}
+{% extends "admin/change_form.html" %}
+{% load i18n admin_modify static filer_admin_tags %}
-{% block extrahead %}
- {{ block.super }}
-
+{% block breadcrumbs %}
+
{% endblock %}
{% block coltype %}{% if is_popup %}colM{% else %}colMS{% endif %}{% endblock %}
{% block object-tools %}
-{% if change %}{% if not is_popup %}
-
-{% endif %}{% endif %}
+ {% if change and not is_popup %}
+
+ {% endif %}
{% endblock %}
{% block after_field_sets %}
-{% if is_popup and select_folder %}
{% endif %}
+ {% filer_admin_context_hidden_formfields %}
{% endblock %}
-{% block sidebar %}{% endblock %}
-
-{% block submit_buttons_bottom %}
- {% if not original or not original|is_restricted_for_user:user %}
- {% submit_row %}
+{% block sidebar %}
+ {% if not is_popup %}
+
+
+
+
+
{% endif %}
{% endblock %}
diff --git a/filer/templates/admin/filer/folder/choose_copy_destination.html b/filer/templates/admin/filer/folder/choose_copy_destination.html
index 17e11b592..3bd73f5bc 100644
--- a/filer/templates/admin/filer/folder/choose_copy_destination.html
+++ b/filer/templates/admin/filer/folder/choose_copy_destination.html
@@ -1,30 +1,76 @@
-{% extends "admin/filer/base_site.html" %}
-{% load i18n filer_admin_tags %}
+{% extends "admin/base_site.html" %}
+{% load i18n static %}
{% block breadcrumbs %}
-{% include "admin/filer/breadcrumbs.html" %}
+ {% include "admin/filer/breadcrumbs.html" %}
+{% endblock %}
+
+{% block extrastyle %}
+ {{ block.super }}
+
+
{% endblock %}
{% block extrahead %}
{{ block.super }}
+
+
+
{% endblock %}
+
{% block content %}
-{% if not to_copy %}
-
{% blocktrans %}There are no files and/or folders available to copy.{% endblocktrans %}
-{% else %}
-
{% blocktrans %}The following files and/or folders will be copied to a destination folder (retaining their tree structure):{% endblocktrans %}
-
{{ to_copy|unordered_list }}
-