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('Folder Icon', 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 = `
  • {msg}
`; + 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 %} - - {% endif %} - {{ field }} - {% endfor %} - - {% if actions_selection_counter %} - -
- {{ selection_note }} - {% if paginator.count != paginated_items.object_list|length %} - - - {% 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 %} + 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 %} - - {% 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 }}
-
{% csrf_token %} -
- - -
-
-{% 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 %} -
+
+ {% csrf_token %} +
+ {% for f in files_queryset %} + + {% endfor %} + {% for f in folders_queryset %} + + {% endfor %} + {% if is_popup %} + + {% if select_folder %}{% endif %} + {% endif %} + + + {% translate "No, take me back" %} + +
+
{% 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 %} -
{% csrf_token %} -
- {% for f in files_queryset %} - - {% endfor %} - {% for f in folders_queryset %} - - {% endfor %} - {% if is_popup %} - - {% if select_folder %}{% endif %} - {% endif %} - - - -
-
-{% 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 }}
-
{% csrf_token %} -
- {% for f in files_queryset %}{% endfor %} - {% for f in folders_queryset %}{% endfor %} - - - {% include 'admin/filer/folder/destination_field.html' %} - {{ copy_form.as_p_with_help }} -
-
+ {% if perms_lacking %} +

{% blocktrans %}Your account doesn't have permissions to copy all of the selected files and/or folders.{% endblocktrans %}

+ - -{% endif %} + {% else %} + {% if not destination_folders %} +

{% blocktrans %}There are no destination folders available.{% endblocktrans %}

+ + {% else %} + {% 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 }}
+
+ {% csrf_token %} +
+ {% for f in files_queryset %} + + {% endfor %} + {% for f in folders_queryset %} + + {% endfor %} + + +

+ + +

+ {{ copy_form.as_p }} + + +
+
+ {% endif %} + {% endif %} + {% endif %} {% endblock %} diff --git a/filer/templates/admin/filer/folder/choose_images_resize_options.html b/filer/templates/admin/filer/folder/choose_images_resize_options.html index de1e3d607..a47df078a 100644 --- a/filer/templates/admin/filer/folder/choose_images_resize_options.html +++ b/filer/templates/admin/filer/folder/choose_images_resize_options.html @@ -1,35 +1,45 @@ {% extends "admin/base_site.html" %} -{% load i18n filer_admin_tags %} +{% load i18n static %} {% block breadcrumbs %} -{% include "admin/filer/breadcrumbs.html" %} + {% include "admin/filer/breadcrumbs.html" %} +{% endblock %} + +{% block extrastyle %} + {{ block.super }} + {% endblock %} {% block content %} -{% if not to_resize %} -

{% blocktrans %}There are no images available to resize.{% endblocktrans %}

-{% else %} -

{% blocktrans %}The following images will be resized:{% endblocktrans %}

-
    {{ to_resize|unordered_list }}
-
{% csrf_token %} -
- {% for f in files_queryset %} - - {% endfor %} - {% for f in folders_queryset %} - - {% endfor %} - - - {% if cmsplugin_enabled %} -

{% blocktrans %}Choose an existing thumbnail option or enter resize parameters:{% endblocktrans %}

+ {% if perms_lacking %} +

{% blocktrans %}Your account doesn't have permissions to resize all of the selected images.{% endblocktrans %}

{% else %} -

{% blocktrans %}Choose resize parameters:{% endblocktrans %}

- {% endif %} - {{ resize_form.as_p_with_help }} -

{% blocktrans %}Warning: Images will be resized in-place and originals will be lost. Maybe first make a copy of them to retain the originals.{% endblocktrans %}

-

-
-
-{% endif %} + {% if not to_resize %} +

{% blocktrans %}There are no images available to resize.{% endblocktrans %}

+ {% else %} +

{% blocktrans %}The following images will be resized:{% endblocktrans %}

+
    {{ to_resize|unordered_list }}
+
{% csrf_token %} +
+ {% for f in files_queryset %} + + {% endfor %} + {% for f in folders_queryset %} + + {% endfor %} + + +

{% blocktrans %}Choose an existing thumbnail option or enter resize parameters:{% endblocktrans %}

+ {% for fieldset in resize_form.admin_form %} + {% include "admin/includes/fieldset.html" %} + {% endfor %} +

{% blocktrans %}Warning: Images will be resized in-place and originals will be lost. Maybe first make a copy of them to retain the originals.{% endblocktrans %}

+ +
+ +
+
+
+ {% endif %} + {% endif %} {% endblock %} diff --git a/filer/templates/admin/filer/folder/choose_move_destination.html b/filer/templates/admin/filer/folder/choose_move_destination.html index 37fdfc2f3..c59dfb385 100644 --- a/filer/templates/admin/filer/folder/choose_move_destination.html +++ b/filer/templates/admin/filer/folder/choose_move_destination.html @@ -1,27 +1,72 @@ -{% 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_move %} -

{% blocktrans %}There are no files and/or folders available to move.{% endblocktrans %}

-{% else %} -

{% blocktrans %}The following files and/or folders will be moved to a destination folder (retaining their tree structure):{% endblocktrans %}

-
    {{ to_move|unordered_list }}
-
{% csrf_token %} -
- {% for f in files_queryset %}{% endfor %} - {% for f in folders_queryset %}{% endfor %} - - - {% include 'admin/filer/folder/destination_field.html' %} -
- + {% if perms_lacking %} +

{% blocktrans %}Your account doesn't have permissions to move all of the selected files and/or folders.{% endblocktrans %}

+ -
- -{% endif %} + {% else %} + {% if not destination_folders %} +

{% blocktrans %}There are no destination folders available.{% endblocktrans %}

+ + {% else %} + {% if not to_move %} +

{% blocktrans %}There are no files and/or folders available to move.{% endblocktrans %}

+ + {% else %} +

{% blocktrans %}The following files and/or folders will be moved to a destination folder (retaining their tree structure):{% endblocktrans %}

+
    {{ to_move|unordered_list }}
+
{% csrf_token %} +
+ {% for f in files_queryset %} + + {% endfor %} + {% for f in folders_queryset %} + + {% endfor %} + + +

+

+ + +
+
+ {% endif %} + {% endif %} + {% endif %} {% endblock %} diff --git a/filer/templates/admin/filer/folder/choose_rename_format.html b/filer/templates/admin/filer/folder/choose_rename_format.html index 8785c10b8..fae8ea1b7 100644 --- a/filer/templates/admin/filer/folder/choose_rename_format.html +++ b/filer/templates/admin/filer/folder/choose_rename_format.html @@ -1,53 +1,65 @@ {% extends "admin/base_site.html" %} -{% load i18n filer_admin_tags %} +{% load i18n static %} {% block breadcrumbs %} -{% include "admin/filer/breadcrumbs.html" %} + {% include "admin/filer/breadcrumbs.html" %} +{% endblock %} + +{% block extrastyle %} + {{ block.super }} + {% endblock %} {% block content %} -{% if not to_rename %} -

{% blocktrans %}There are no files available to rename.{% endblocktrans %}

-{% else %} -

{% blocktrans %}The following files will be renamed (they will stay in their folders and keep original filename, only displayed filename will be changed):{% endblocktrans %}

-
    {{ to_rename|unordered_list }}
-
{% csrf_token %} -
- {% for f in files_queryset %} - - {% endfor %} - {% for f in folders_queryset %} - - {% endfor %} - - - {{ rename_form.as_p_with_help }} -
-

Rename format is in Python % operator format using dictionary of possible values:

-
-
original_filename
-
original_basename
-
Original filename without possible file extension.
-
original_extension
-
current_filename
-
current_basename
-
Current filename without possible file extension.
-
current_extension
-
current_folder
-
Name of the folder the file is currently in.
-
counter
-
Renaming sequence counter in the current folder (1-based).
-
global_counter
-
Renaming squence counter for all files currently renaming (1-based).
-
-

Examples:

-
    -
  • Prefix %(current_filename)s
  • -
  • Image %(counter)03d
  • -
-
-

-
-
-{% endif %} + {% if perms_lacking %} +

{% blocktrans %}Your account doesn't have permissions to rename all of the selected files.{% endblocktrans %}

+ {% else %} + {% if not to_rename %} +

{% blocktrans %}There are no files available to rename.{% endblocktrans %}

+ {% else %} +

{% blocktrans %}The following files will be renamed (they will stay in their folders and keep original filename, only displayed filename will be changed):{% endblocktrans %}

+
    {{ to_rename|unordered_list }}
+
+ {% csrf_token %} +
+ {% for f in files_queryset %} + + {% endfor %} + {% for f in folders_queryset %} + + {% endfor %} + + + {{ rename_form.as_p }} +
+

Rename format is in Python % operator format using dictionary of possible values:

+
+
original_filename
+
original_basename
+
Original filename without possible file extension.
+
original_extension
+
current_filename
+
current_basename
+
Current filename without possible file extension.
+
current_extension
+
current_folder
+
Name of the folder the file is currently in.
+
counter
+
Renaming sequence counter in the current folder (1-based).
+
global_counter
+
Renaming squence counter for all files currently renaming (1-based).
+
+

Examples:

+
    +
  • Prefix %(current_filename)s
  • +
  • Image %(counter)03d
  • +
+
+

+ +

+
+
+ {% endif %} + {% endif %} {% endblock %} diff --git a/filer/templates/admin/filer/folder/directory_listing.html b/filer/templates/admin/filer/folder/directory_listing.html index d13f0aefb..a748d0b60 100644 --- a/filer/templates/admin/filer/folder/directory_listing.html +++ b/filer/templates/admin/filer/folder/directory_listing.html @@ -1,142 +1,265 @@ {% extends "admin/filer/base_site.html" %} -{% load filer_admin_tags filermedia i18n %} +{% load i18n static filer_admin_tags %} -{% block extrahead %} - {{ block.super }} - {# upload stuff #} - {{ media.js }} - - - - - - - - - {% if action_form %} - {% if actions_on_top or actions_on_bottom %} - - {% endif %} - {% endif %} -{% endblock %} - -{% block coltype %}colMS row{% endblock %} -{% block bodyclass %}change-list filebrowser{% endblock %} +{% block coltype %}{% endblock %} +{% block bodyclass %}{{ block.super }} change-list filebrowser{% endblock %} {% block extrastyle %} {{ block.super }} - {{ media.css }} + {{ media.css }} {% if action_form %} {% url 'admin:jsi18n' as jsi18nurl %} {% endif %} - {% if query.pop %} - {% endif %} - {% if not actions_on_top and not actions_on_bottom %} - {% endif %} {% endblock %} {% block breadcrumbs %} - {% with folder as instance %} - {% include "admin/filer/breadcrumbs.html" %} - {% endwith %} + {% if not is_popup %} + + {% endif %} {% endblock %} +{% block sidebar %}{% endblock %} -{% block sidebar %} - +{% block content_title %} +

 

{% endblock %} +{% block object-tools %} +{% endblock %} -{% block content_title %}{% endblock %} {% block content %} -
-
    - {% if not folder|is_restricted_for_user:user and folder.can_have_subfolders %} - {%if is_popup and folder.is_root %} - {%else%} -
  • - {% trans "New Folder" %} -
  • - {% endif %} - {% endif %} -
  • - {% trans 'Upload' %} -
  • - {% include 'admin/filer/tools/upload_button_js.html' %} -
- -
- {% include "admin/filer/tools/search_form.html" %} - - {% if not folder.is_root %} -
+
+ {% block filer-tools %} + - {% endif %} - {% endif %} - -
{% csrf_token %} - {% if is_popup %}{% endif %} - {% if action_form and actions_on_top and paginator.count and not select_folder and not is_popup %}{% filer_actions %}{% endif %} - {% include "admin/filer/folder/directory_table.html" %} - {% if action_form and actions_on_bottom and paginator.count and not select_folder and not is_popup %}{% filer_actions %}{% endif %} -
- +
+
+
+ {% include "admin/filer/tools/search_form.html" %} +
-
- {% endblock %} diff --git a/filer/templates/admin/filer/folder/directory_table_list.html b/filer/templates/admin/filer/folder/directory_table_list.html new file mode 100644 index 000000000..54647e5fa --- /dev/null +++ b/filer/templates/admin/filer/folder/directory_table_list.html @@ -0,0 +1,256 @@ +{% load i18n l10n admin_list filer_tags filer_admin_tags static thumbnail %} +
+ diff --git a/filer/templates/admin/filer/folder/directory_thumbnail_list.html b/filer/templates/admin/filer/folder/directory_thumbnail_list.html new file mode 100644 index 000000000..b7a3fe91f --- /dev/null +++ b/filer/templates/admin/filer/folder/directory_thumbnail_list.html @@ -0,0 +1,228 @@ +{% load i18n l10n admin_list filer_tags filer_admin_tags static thumbnail %} +
+ diff --git a/filer/templates/admin/filer/folder/legacy_listing.html b/filer/templates/admin/filer/folder/legacy_listing.html new file mode 100644 index 000000000..73beae30f --- /dev/null +++ b/filer/templates/admin/filer/folder/legacy_listing.html @@ -0,0 +1,265 @@ +{% extends "admin/filer/base_site.html" %} +{# Used for django < 5.2 with lagacy object-tools blocks #} +{# Customized templates will need to be updated for django >= 5.2 #} +{# The object-tools block has been renamed filer-tools for django >= 5.2 #} + +{% load i18n static filer_admin_tags %} + +{% block coltype %}{% endblock %} +{% block bodyclass %}{{ block.super }} change-list filebrowser{% endblock %} + +{% block extrastyle %} + {{ block.super }} + + {{ media.css }} + {% if action_form %} + {% url 'admin:jsi18n' as jsi18nurl %} + + {% endif %} + {% if query.pop %} + + {% endif %} +{% endblock %} + +{% block breadcrumbs %} + {% if not is_popup %} + + {% endif %} +{% endblock %} + +{% block sidebar %}{% endblock %} + +{% block content_title %} +

 

+{% endblock %} + +{% block content %} + +
+ {% include "admin/filer/tools/search_form.html" %} + +
+{% endblock %} \ No newline at end of file diff --git a/filer/templates/admin/filer/folder/list_type_switcher.html b/filer/templates/admin/filer/folder/list_type_switcher.html new file mode 100644 index 000000000..ebf95c4e4 --- /dev/null +++ b/filer/templates/admin/filer/folder/list_type_switcher.html @@ -0,0 +1 @@ + diff --git a/filer/templates/admin/filer/folder/new_folder_form.html b/filer/templates/admin/filer/folder/new_folder_form.html index eb0e8dc1a..f9ff43b7d 100644 --- a/filer/templates/admin/filer/folder/new_folder_form.html +++ b/filer/templates/admin/filer/folder/new_folder_form.html @@ -1,37 +1,38 @@ {% extends "admin/change_form.html" %} -{% load i18n %} +{% load i18n filer_admin_tags %} + +{% block title %}{% translate "Add new" %} {% translate "folder" %} | {{ site_title|default:_('Django site admin') }}{% endblock %} + {% block content %} -

{% trans "Add new" %} {% trans "folder" %}

-
-
- {% csrf_token %} -
- - {% if select_folder %}{% endif %} - {% if new_folder_form.errors %} -

- {% blocktrans count new_folder_form.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %} -

- {{ new_folder_form.non_field_errors }} - {% endif %} -
-
- {{ new_folder_form.errors.name.as_ul }} -
- {% for field in new_folder_form %} - {{ field }} - {% endfor %} -
+

{% translate "Add new" %} {% translate "folder" %}

+
+ + {% csrf_token %} +
+ {% filer_admin_context_hidden_formfields %} + {% if new_folder_form.errors %} +

+ {% blocktrans count new_folder_form.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %} +

+ {{ new_folder_form.non_field_errors }} + {% endif %} +
+
+ {{ new_folder_form.errors.name.as_ul }} +
+ {% for field in new_folder_form %} + {{ field }} + {% endfor %} +
+
+
+
+ +
+
-
-
- -
- -
-
-
- - -
+ +
{% endblock %} diff --git a/filer/templates/admin/filer/image/change_form.html b/filer/templates/admin/filer/image/change_form.html index 1065b4178..2c564487a 100644 --- a/filer/templates/admin/filer/image/change_form.html +++ b/filer/templates/admin/filer/image/change_form.html @@ -1,35 +1,22 @@ {% extends "admin/filer/change_form.html" %} -{% load i18n admin_modify filer_admin_tags %} +{% load i18n admin_modify static %} -{% block object-tools %} -{% if change %}{% if not is_popup %} - -{% endif %}{% endif %} -{% endblock %} +{% block extrahead %} + {{ block.super }} -{% block coltype %}colMS row{% endblock %} -{% block field_sets %} - {% for fieldset in adminform %} - {% include "admin/filer/fieldset.html" %} - {% endfor %} + {# upload stuff #} + + {% endblock %} -{% block content %} - {{block.super}} +{% block object-tools %} + {% if change and not is_popup %} + + {% endif %} + {% include "admin/filer/tools/detail_info.html" %} {% endblock %} - - -{%block sidebar %} - -{%endblock%} diff --git a/filer/templates/admin/filer/image/expand.html b/filer/templates/admin/filer/image/expand.html new file mode 100644 index 000000000..891ae07d0 --- /dev/null +++ b/filer/templates/admin/filer/image/expand.html @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/filer/templates/admin/filer/templatetags/file_icon.html b/filer/templates/admin/filer/templatetags/file_icon.html new file mode 100644 index 000000000..39a5f4430 --- /dev/null +++ b/filer/templates/admin/filer/templatetags/file_icon.html @@ -0,0 +1,38 @@ +{% load i18n %} +{% if sidebar_image_ratio %} +
+{% endif %} +{% if download_url %} + {% if mime_maintype == 'audio' %} + + {% elif mime_maintype == 'video' %} + + {% else %} + {{ alt_text }} + {% endif %} +{% else %} + {{ alt_text }} +{% endif %} +{% if sidebar_image_ratio %} +
+ +
+
+{% endif %} diff --git a/filer/templates/admin/filer/tools/clipboard/clipboard.html b/filer/templates/admin/filer/tools/clipboard/clipboard.html index 0c72f0bb0..4dce738b1 100644 --- a/filer/templates/admin/filer/tools/clipboard/clipboard.html +++ b/filer/templates/admin/filer/tools/clipboard/clipboard.html @@ -1,65 +1,55 @@ -{% load thumbnail i18n filer_admin_tags %} +{% load i18n filer_admin_tags %} -{% with user_clipboard as clipboard %} -
- - - - - - - + + + + {% if clipboard.files.count %} + {% with clipboard.files.all as items %} + {% include "admin/filer/tools/clipboard/clipboard_item_rows.html" %} + {% endwith %} + {% else %} + + + + {% endif %} + +

{% trans "Clipboard" %}

-
-
+{% for clipboard in user.filer_clipboards.all %} + - -{% endwith %} + {% endcomment %} +
{% trans "the clipboard is empty" %}
+
+{% endfor %} diff --git a/filer/templates/admin/filer/tools/clipboard/clipboard_item_rows.html b/filer/templates/admin/filer/tools/clipboard/clipboard_item_rows.html index 471439b98..9d46e7fbe 100644 --- a/filer/templates/admin/filer/tools/clipboard/clipboard_item_rows.html +++ b/filer/templates/admin/filer/tools/clipboard/clipboard_item_rows.html @@ -1,13 +1,19 @@ -{% load thumbnail i18n %}{% if items %} -{% for generic_item in items %}{% with generic_item as item %} - -
{{ item.default_alt_text }}
- {{ item.label }} - - -{% endwith %}{% endfor %}{% else %} - - - {% trans "upload failed" %} - - {% endif %} \ No newline at end of file +{% load i18n %} + +{% if items %} + {% for generic_item in items %} + {% with generic_item as item %} + + {{ item.default_alt_text }} + {{ item.label }} + + + {% endwith %} + {% endfor %} +{% else %} + + + {% translate "upload failed" %} + + +{% endif %} diff --git a/filer/templates/admin/filer/tools/detail_info.html b/filer/templates/admin/filer/tools/detail_info.html new file mode 100644 index 000000000..1e18f34ea --- /dev/null +++ b/filer/templates/admin/filer/tools/detail_info.html @@ -0,0 +1,55 @@ +{% load filer_admin_tags i18n static %} +
+
+
+
+ {% file_icon original detail=True %} +
+ {% if original.file.exists %} + +   + {% translate "Download" %} + + {% if expand_image_url %} + + {% translate "Expand" %}  + + + {% endif %} + {% else %} + {% translate "File is missing" %} + {% endif %} +
+
+
+
+ {% if original.file_type or original.modified_at or original.uploaded_at or original.width or original.height or original.size %} +
+ {% if original.file_type %} +
{% translate "Type" %}
+
{{ original.extension|upper }} {{ original.file_type }} ({{ original.mime_type }})
+ {% endif %} + {% if original.width or original.height %} +
{% translate "Size" %}
+
{{ original.width|floatformat }}x{{ original.height|floatformat }} px
+ {% endif %} + {% if original.size %} +
{% translate "File-size" %}
+
{{ original.size|filesizeformat }}
+ {% endif %} + {% if original.modified_at %} +
{% translate "Modified" %}
+
{{ original.modified_at }}
+ {% endif %} + {% if original.uploaded_at %} +
{% translate "Created" %}
+
{{ original.uploaded_at }}
+ {% endif %} + {% if original.owner %} +
{% translate "Owner" %}
+
{{ original.owner }}
+ {% endif %} +
+ {% endif %} +
+
diff --git a/filer/templates/admin/filer/tools/search_form.html b/filer/templates/admin/filer/tools/search_form.html index 0fdd405aa..cf3f98976 100644 --- a/filer/templates/admin/filer/tools/search_form.html +++ b/filer/templates/admin/filer/tools/search_form.html @@ -1,43 +1,9 @@ -{% load filermedia filer_admin_tags %} -{% load i18n %} -
-
- +{% load i18n static filer_admin_tags %} + +{% if show_result_count %} +
+ ({% translate "found" %} {% blocktrans count folder_children|length as counter %}{{ counter }} folder{% plural %}{{ counter }} folders{% endblocktrans %} {% translate "and" %} + {% blocktrans count folder_files|length as counter %}{{ counter }} file{% plural %}{{ counter }} files{% endblocktrans %}) + {% translate "cancel search" %}
-
-
- +{% endif %} diff --git a/filer/templates/admin/filer/widgets/admin_file.html b/filer/templates/admin/filer/widgets/admin_file.html index d84586994..65f4d9994 100644 --- a/filer/templates/admin/filer/widgets/admin_file.html +++ b/filer/templates/admin/filer/widgets/admin_file.html @@ -1,40 +1,62 @@ -{% comment "Template for file widget" %} - Changes made here should also be considered for the customizable version - admin_file_custom.html. -{% endcomment %} -{% load i18n filer_admin_tags %}{% spaceless %} -{% if object %} - {% if object.icons.32 %} - {{ object.label }} -  {{ object.label }} - {% else %} - - {% trans 'file missing' %} - -  {% trans 'file missing' %} - {% endif %} -{% else %} - - {% trans 'no file selected' %} - -   -{% endif %} - - {% trans 'Lookup' %} - - -
-{{ hidden_input }} - +{% load i18n filer_admin_tags static %} + +{% spaceless %} +
+
+ + + +
+
+
+ {% translate "or drop your file here" %} +
+ + + {% if object %} + {% if object.file.exists %} + {% file_icon object detail="thumbnail" %} +  {{ object.label }} + {% else %} + {% file_icon object %} +  {% translate 'File is missing' %} + {% endif %} + {% else %} + +   + {% endif %} + + + + + + + + + + + {% translate 'Choose File' %} + + + +
+ + +
+
+
{% endspaceless %} diff --git a/filer/templates/admin/filer/widgets/admin_folder.html b/filer/templates/admin/filer/widgets/admin_folder.html index f7b782b1f..836da2c60 100644 --- a/filer/templates/admin/filer/widgets/admin_folder.html +++ b/filer/templates/admin/filer/widgets/admin_folder.html @@ -1,22 +1,24 @@ -{% load i18n filer_admin_tags filermedia %}{% spaceless %} -{% trans 'no folder selected' %} {% if object %}{{ object.pretty_logical_path }}{% else %}{% trans 'none selected' %}{% endif %} - - {% trans 'Lookup' %} - - -
-{{ hidden_input }} - +{% load i18n filer_admin_tags static %} + +{% spaceless %} +
+ + +   + {% trans "Choose Folder" %} + + + + + {% if object %} + {{ object.pretty_logical_path }} + {% endif %} + + + + + + + +
{% endspaceless %} diff --git a/filer/templatetags/filer_admin_tags.py b/filer/templatetags/filer_admin_tags.py index 8dd08a542..8ef9bd9fe 100644 --- a/filer/templatetags/filer_admin_tags.py +++ b/filer/templatetags/filer_admin_tags.py @@ -1,13 +1,32 @@ -from django.conf import settings +from math import ceil + +from django.contrib.staticfiles.storage import staticfiles_storage +from django.core.files.storage import FileSystemStorage from django.template import Library -from packaging.version import parse -import django -import pytz -import datetime -import filer +from django.templatetags.static import static +from django.urls import reverse +from django.utils.html import escapejs, format_html_join +from django.utils.safestring import mark_safe +from django.utils.translation import gettext_lazy as _ + +from easy_thumbnails.engine import NoSourceGenerator +from easy_thumbnails.exceptions import InvalidImageFormatError +from easy_thumbnails.files import get_thumbnailer +from easy_thumbnails.options import ThumbnailOptions + +from filer import settings +from filer.admin.tools import admin_url_params, admin_url_params_encoded +from filer.models.imagemodels import BaseImage +from filer.settings import ( + DEFERRED_THUMBNAIL_SIZES, FILER_MAX_SVG_THUMBNAIL_SIZE, FILER_TABLE_ICON_SIZE, FILER_THUMBNAIL_ICON_SIZE, +) + register = Library() +assignment_tag = getattr(register, 'assignment_tag', register.simple_tag) + + def filer_actions(context): """ Track the number of times the action field has been rendered on the page, @@ -15,121 +34,196 @@ def filer_actions(context): """ context['action_index'] = context.get('action_index', -1) + 1 return context -filer_actions = register.inclusion_tag("admin/filer/actions.html", takes_context=True)(filer_actions) -if parse(django.get_version()) < parse('1.4'): - ADMIN_ICON_BASE = "%sadmin/img/admin/" % settings.STATIC_URL -else: - ADMIN_ICON_BASE = "%sadmin/img/" % settings.STATIC_URL -ADMIN_CSS_BASE = "%sadmin/css/" % settings.STATIC_URL -ADMIN_JS_BASE = "%sadmin/js/" % settings.STATIC_URL +filer_actions = register.inclusion_tag( + "admin/filer/actions.html", takes_context=True)(filer_actions) + + +@register.inclusion_tag( + 'admin/filer/folder/list_type_switcher.html', + takes_context=True, +) +def filer_folder_list_type_switcher(context): + choice_list = settings.FILER_FOLDER_ADMIN_LIST_TYPE_CHOICES + current_list_type = context['list_type'] + # This solution is user-friendly when there's only 2 choices + # If there will be more list types then please change this switcher to more + # proper widget (like for e.g. select list) + next_list_type = next( + iter(choice_list[choice_list.index(current_list_type) + 1:]), + choice_list[0], + ) + + context['url'] = admin_url_params_encoded( + context['request'], + params={'_list_type': next_list_type}, + ) + context['tooltip_text'] = settings.FILER_FOLDER_ADMIN_LIST_TYPE_SWITCHER_SETTINGS[next_list_type]['tooltip_text'] + context['icon'] = settings.FILER_FOLDER_ADMIN_LIST_TYPE_SWITCHER_SETTINGS[next_list_type]['icon'] + return context + -@register.simple_tag -def admin_icon_base(): - return ADMIN_ICON_BASE +@register.simple_tag(takes_context=True) +def filer_admin_context_url_params(context, first_separator='?'): + return admin_url_params_encoded( + context['request'], first_separator=first_separator) -@register.simple_tag -def admin_css_base(): - return ADMIN_CSS_BASE -@register.simple_tag -def admin_js_base(): - return ADMIN_JS_BASE +@register.simple_tag(takes_context=True) +def filer_admin_context_hidden_formfields(context): + request = context.get('request') + return format_html_join( + '\n', + '', + admin_url_params(request).items(), + ) + + +@assignment_tag(takes_context=True) +def filer_has_permission(context, item, action): + """Does the current user (taken from the request in the context) have + permission to do the given action on the given item. -@register.inclusion_tag('admin/filer/submit_line.html', takes_context=True) -def submit_row(context): - """ - Displays the row of buttons for delete and save. """ - opts = context['opts'] - change = context['change'] - is_popup = context['is_popup'] - save_as = context['save_as'] - ctx = { - 'opts': opts, - 'obj': context.get('original'), - 'show_delete_link': not is_popup and context['has_delete_permission'] and change and context.get('show_delete', True), - 'show_save_as_new': not is_popup and change and save_as, - 'show_save_and_add_another': context['has_add_permission'] and not is_popup and (not save_as or context['add']), - 'show_save_and_continue': not is_popup and context['has_change_permission'], - 'is_popup': is_popup, - 'show_save': True, - 'preserved_filters': context.get('preserved_filters'), + permission_method_name = f'has_{action}_permission' + permission_method = getattr(item, permission_method_name, None) + request = context.get('request') + + if not permission_method or not request: + return False + # Call the permission method. + # This amounts to calling `item.has_X_permission(request)` + return permission_method(request) + + +def file_icon_context(file, detail, width, height): + mime_maintype, mime_subtype = file.mime_maintype, file.mime_subtype + context = { + 'mime_maintype': mime_maintype, + 'mime_type': file.mime_type, } - if context.get('original') is not None: - ctx['original'] = context['original'] - return ctx + height, width, context = get_aspect_ratio_and_download_url(context, detail, file, height, width) + # returned context if icon is not available + not_available_context = { + 'icon_url': staticfiles_storage.url('filer/icons/file-missing.svg'), + 'alt_text': _("File is missing"), + 'width': width, + 'height': width, # The icon is a square + } + # Check if file exists for performance reasons (only on FileSystemStorage) + if file.file and isinstance(file.file.source_storage, FileSystemStorage) and not file.file.exists(): + return not_available_context + + add_styles = {} + if isinstance(file, BaseImage): + thumbnailer = get_thumbnailer(file) + + # SVG files may contain multiple vector graphics, and width and height are not available for them. If file does + # not have width or height just ignore the thumbnail icon. Otherwise, continue with the standard procedure. + if file.width == 0.0 or file.height == 0.0: + icon_url = staticfiles_storage.url('filer/icons/file-unknown.svg') + else: + if detail: + opts = {'size': (width, height), 'upscale': True} + else: + opts = {'size': (width, height), 'crop': True} + thumbnail_options = ThumbnailOptions(opts) + # Optimize directory listing: + if width == height and width in DEFERRED_THUMBNAIL_SIZES and hasattr(file, "thumbnail_name"): + # Get name of thumbnail from easy-thumbnail + configured_name = thumbnailer.get_thumbnail_name(thumbnail_options, transparent=file._transparent) + # If the name was annotated: Thumbnail exists and we can use it + if configured_name == file.thumbnail_name: + icon_url = file.file.thumbnail_storage.url(configured_name) + if mime_subtype != 'svg+xml' and file.thumbnailx2_name: + context['highres_url'] = file.file.thumbnail_storage.url(file.thumbnailx2_name) + elif mime_subtype == 'svg+xml': + if file.size < FILER_MAX_SVG_THUMBNAIL_SIZE: + icon_url = file.url + else: + # Only display a generic image icon + # Better solution: Render a bitmap thumbnail from SVG + icon_url = staticfiles_storage.url('filer/icons/file-picture.svg') + add_styles = { + "object-fit": "cover", # Mimic the behavior of the thumbnail + } + else: # Probably does not exist, defer creation + icon_url = reverse("admin:filer_file_fileicon", args=(file.pk, width)) + context['alt_text'] = file.default_alt_text + else: + # Try creating thumbnails / take existing ones + try: + icon_url = thumbnailer.get_thumbnail(thumbnail_options).url + context['alt_text'] = file.default_alt_text + if mime_subtype != 'svg+xml': + thumbnail_options['size'] = 2 * width, 2 * height + context['highres_url'] = thumbnailer.get_thumbnail(thumbnail_options).url + except (InvalidImageFormatError, NoSourceGenerator): + # This is caught by file.exists() for file storage systems + # For remote storage systems we catch the error to avoid second trip + # to the storage system + return not_available_context + elif mime_maintype in ['audio', 'font', 'video']: + icon_url = staticfiles_storage.url(f'filer/icons/file-{mime_maintype}.svg') + height = width # icon is a square + elif mime_maintype == 'application' and mime_subtype in ['zip', 'pdf']: + icon_url = staticfiles_storage.url(f'filer/icons/file-{mime_subtype}.svg') + height = width # icon is a square + else: + icon_url = staticfiles_storage.url('filer/icons/file-unknown.svg') + height = width # icon is a square + context.update(width=width, height=height, icon_url=icon_url) + if add_styles: + styles = "; ".join(f"{k}: {v}" for k, v in add_styles.items()) + context.update(add_styles=f'style="{styles}"') + return context +def get_aspect_ratio_and_download_url(context, detail, file, height, width): + # Get download_url and aspect ratio right for detail view + if detail: + context['download_url'] = file.url + if isinstance(file, BaseImage): + # only check for file width, if the file + # is actually an image and not on other files + # because they don't really have width or height + if file.width: + width, height = 210, ceil(210 / file.width * file.height) + context['sidebar_image_ratio'] = '%.6f' % (file.width / 210) + return height, width, context -@register.simple_tag(takes_context=True) -def get_popup_params(context, sep='?'): - is_popup = context.get('is_popup', False) - select_folder = context.get('select_folder', False) - current_site = context.get('current_site', False) - file_type = context.get('file_type', None) - params = '' - if is_popup: - params += '%s_popup=1' % sep - if select_folder: - params += '&select_folder=1' - if current_site: - params += '¤t_site=%s' % current_site - if file_type: - params += '&file_type=%s' % file_type - - return params - - -@register.filter -def is_restricted_for_user(filer_obj, user): - return (filer_obj.is_readonly_for_user(user) or - filer_obj.is_restricted_for_user(user)) - - -@register.filter -def is_readonly_for_user(filer_obj, user): - return filer_obj.is_readonly_for_user(user) - - -@register.filter -def can_change_folder(folder, user): - return folder.has_change_permission(user) - - -@register.filter -def pretty_display(filer_obj): - if isinstance(filer_obj, filer.models.Folder): - return '/%s' % '/'.join(filer_obj.get_ancestors(include_self=True) - .values_list('name', flat=True)) - if isinstance(filer_obj, filer.models.File): - name = filer_obj.actual_name - if not filer_obj.folder_id: - return '/%s' % name - return '/%s' % '/'.join( - list(filer.models.Folder.all_objects.get(id=filer_obj.folder_id) - .get_ancestors(include_self=True) - .values_list('name', flat=True)) + [name]) - return '' - - -def _build_timezone_dict(): - offset_with_timezone = {} - for zone in pytz.common_timezones: - timezone_obj = pytz.timezone(zone) - zone_offset = datetime.datetime.now(timezone_obj).strftime("%z") - offset_with_timezone[zone_offset] = timezone_obj - return offset_with_timezone - -_OFFSETS_WITH_TIMEZONES = _build_timezone_dict() -@register.simple_tag(takes_context=True) -def client_timezone(context, date): - gmt_offset = context.get('request').COOKIES.get('gmt_offset', None) - if not gmt_offset: - return date - client_timezone = _OFFSETS_WITH_TIMEZONES.get(gmt_offset, None) - if not client_timezone: - return date - return date.astimezone(client_timezone) +@register.inclusion_tag('admin/filer/templatetags/file_icon.html') +def file_icon(file, detail=False, size=None): + """ + This templatetag returns a rendered ` + to be used for rendering thumbnails of files in the directory listing or in the corresponding detail + views for that image. + """ + if size: + width, height = (int(s) for s in size.split('x')) + elif detail == "thumbnail": + width, height = FILER_THUMBNAIL_ICON_SIZE, FILER_THUMBNAIL_ICON_SIZE + elif detail is True: + width, height = 2 * FILER_TABLE_ICON_SIZE, 2 * FILER_TABLE_ICON_SIZE + else: + width, height = FILER_TABLE_ICON_SIZE, FILER_TABLE_ICON_SIZE + return file_icon_context(file, detail is True, width, height) + + +@register.simple_tag +def file_icon_url(file): + # Cache since it is called repeatedly by templates + if not hasattr(file, "_file_icon_url_cache"): + context = file_icon_context(file, False, 2 * FILER_TABLE_ICON_SIZE, 2 * FILER_TABLE_ICON_SIZE) + file._file_icon_url_cache = escapejs(context.get('highres_url', context['icon_url'])) + return file._file_icon_url_cache + + +@register.simple_tag +def icon_css_library(): + html = "" + for lib in settings.ICON_CSS_LIB: + html += f'' + return mark_safe(html) diff --git a/filer/templatetags/filer_image_tags.py b/filer/templatetags/filer_image_tags.py index 78a58d716..5588521f1 100644 --- a/filer/templatetags/filer_image_tags.py +++ b/filer/templatetags/filer_image_tags.py @@ -1,12 +1,17 @@ -#-*- coding: utf-8 -*- -from django.template import Library import re +from django.template import Library + + register = Library() RE_SIZE = re.compile(r'(\d+)x(\d+)$') +def percentage(part, whole): + return 100 * float(part) / float(whole) + + def _recalculate_size(size, index, divisor=0, padding=0, keep_aspect_ratio=False): new_one = size[index] @@ -15,8 +20,8 @@ def _recalculate_size(size, index, divisor=0, padding=0, if padding: new_one = new_one - padding if keep_aspect_ratio: - new_two = int(float(new_one) * \ - float(size[int(not index)]) / size[index]) + new_two = int( + float(new_one) * float(size[int(not index)]) / size[index]) else: new_two = int(size[int(not index)]) @@ -56,6 +61,8 @@ def extra_padding_x(original_size, padding): Reduce the width of `original_size` by `padding` """ return _resize(original_size, 0, padding=padding) + + extra_padding_x = register.filter(extra_padding_x) @@ -65,6 +72,8 @@ def extra_padding_x_keep_ratio(original_size, padding): ratio. """ return _resize(original_size, 0, padding=padding, keep_aspect_ratio=True) + + extra_padding_x_keep_ratio = register.filter(extra_padding_x_keep_ratio) @@ -73,6 +82,8 @@ def extra_padding_y(original_size, padding): Reduce the height of `original_size` by `padding` """ return _resize(original_size, 1, padding=padding) + + extra_padding_y = register.filter(extra_padding_y) @@ -82,16 +93,22 @@ def extra_padding_y_keep_ratio(original_size, padding): ratio. """ return _resize(original_size, 1, padding=padding, keep_aspect_ratio=True) + + extra_padding_y_keep_ratio = register.filter(extra_padding_y_keep_ratio) def divide_x_by(original_size, divisor): return _resize(original_size, 0, divisor=divisor) + + devide_x_by = register.filter(divide_x_by) def divide_y_by(original_size, divisor): return _resize(original_size, 1, divisor=divisor) + + devide_y_by = register.filter(divide_y_by) @@ -99,4 +116,24 @@ def divide_xy_by(original_size, divisor): size = divide_x_by(original_size, divisor=divisor) size = divide_y_by(size, divisor=divisor) return size + + divide_xy_by = register.filter(divide_xy_by) + + +def get_css_position(image): + if not image or not image.subject_location: + return '50% 50%' + + x, y = image.subject_location.split(',') + width = image.width + height = image.height + + coords = '{}% {}%'.format( + percentage(x, width), + percentage(y, height) + ) + return coords + + +get_css_position = register.filter(get_css_position) diff --git a/filer/templatetags/filer_tags.py b/filer/templatetags/filer_tags.py index f481c50e0..faaba6109 100644 --- a/filer/templatetags/filer_tags.py +++ b/filer/templatetags/filer_tags.py @@ -1,7 +1,8 @@ -#-*- coding: utf-8 -*- -from django.template import Library import math +from django.template import Library + + register = Library() # The templatetag below is copied from sorl.thumbnail @@ -49,6 +50,7 @@ def filesize(bytes, format='auto1024'): elif format not in ('auto1024', 'auto1000', 'auto1024long', 'auto1000long'): return bytes + # Check for valid bytes try: bytes = int(bytes) @@ -82,12 +84,12 @@ def filesize(bytes, format='auto1024'): unit = filesize_long_formats.get(unit, '') if base == 1024 and unit: unit = '%sbi' % unit[:2] - unit = '%sbyte%s' % (unit, bytes != '1' and 's' or '') + unit = '{}byte{}'.format(unit, bytes != '1' and 's' or '') else: - unit = '%s%s' % (base == 1024 and unit.upper() or unit, + unit = '{}{}'.format(base == 1024 and unit.upper() or unit, base == 1024 and 'iB' or 'B') - return '%s %s' % (bytes, unit) + return f'{bytes} {unit}' if bytes == 0: return bytes @@ -99,4 +101,6 @@ def filesize(bytes, format='auto1024'): elif format_len == 3: bytes = bytes >> (10 * (base - 1)) return bytes / 1024.0 + + register.filter(filesize) diff --git a/filer/templatetags/filermedia.py b/filer/templatetags/filermedia.py deleted file mode 100644 index 84a7f60f7..000000000 --- a/filer/templatetags/filermedia.py +++ /dev/null @@ -1,16 +0,0 @@ -#-*- coding: utf-8 -*- -from django.template import Library - -register = Library() - - -def filer_staticmedia_prefix(): - """ - Returns the string contained in the setting FILER_STATICMEDIA_PREFIX. - """ - try: - from filer import settings - except ImportError: - return '' - return settings.FILER_STATICMEDIA_PREFIX -filer_staticmedia_prefix = register.simple_tag(filer_staticmedia_prefix) diff --git a/filer/tests/foo_file.jpg b/filer/tests/foo_file.jpg new file mode 100644 index 000000000..9e4936f71 Binary files /dev/null and b/filer/tests/foo_file.jpg differ diff --git a/filer/tests/image_name b/filer/tests/image_name new file mode 100644 index 000000000..9e4936f71 Binary files /dev/null and b/filer/tests/image_name differ diff --git a/filer/tests/new_one.jpg b/filer/tests/new_one.jpg new file mode 100644 index 000000000..697f7c7ff Binary files /dev/null and b/filer/tests/new_one.jpg differ diff --git a/filer/tests/new_three.jpg b/filer/tests/new_three.jpg new file mode 100644 index 000000000..697f7c7ff Binary files /dev/null and b/filer/tests/new_three.jpg differ diff --git a/filer/tests/testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.jpg b/filer/tests/testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.jpg new file mode 100644 index 000000000..9e4936f71 Binary files /dev/null and b/filer/tests/testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.jpg differ diff --git a/filer/thumbnail_processors.py b/filer/thumbnail_processors.py index a06b4ef73..04fc43789 100644 --- a/filer/thumbnail_processors.py +++ b/filer/thumbnail_processors.py @@ -1,16 +1,18 @@ -#-*- coding: utf-8 -*- import re + +from easy_thumbnails import processors + +from .settings import FILER_SUBJECT_LOCATION_IMAGE_DEBUG, FILER_WHITESPACE_COLOR + + try: - from PIL import Image - from PIL import ImageDraw + from PIL import Image, ImageDraw except ImportError: try: import Image import ImageDraw except ImportError: raise ImportError("The Python Imaging Library was not found.") -from easy_thumbnails import processors -from filer.settings import FILER_SUBJECT_LOCATION_IMAGE_DEBUG RE_SUBJECT_LOCATION = re.compile(r'^(\d+),(\d+)$') @@ -30,12 +32,13 @@ def normalize_subject_location(subject_location): def scale_and_crop_with_subject_location(im, size, subject_location=False, - crop=False, upscale=False, **kwargs): + zoom=None, crop=False, upscale=False, + **kwargs): """ Like ``easy_thumbnails.processors.scale_and_crop``, but will use the coordinates in ``subject_location`` to make sure that that part of the image is in the center or at least somewhere on the cropped image. - Please not that this does *not* work correctly if the image has been + Please note that this does *not* work correctly if the image has been resized by a previous processor (e.g ``autocrop``). ``crop`` needs to be set for this to work, but any special cropping @@ -44,15 +47,15 @@ def scale_and_crop_with_subject_location(im, size, subject_location=False, subject_location = normalize_subject_location(subject_location) if not (subject_location and crop): # use the normal scale_and_crop - return processors.scale_and_crop(im, size, crop=crop, + return processors.scale_and_crop(im, size, zoom=zoom, crop=crop, upscale=upscale, **kwargs) # for here on we have a subject_location and cropping is on # --snip-- this is a copy and paste of the first few # lines of ``scale_and_crop`` - source_x, source_y = [float(v) for v in im.size] - target_x, target_y = [float(v) for v in size] + source_x, source_y = (float(v) for v in im.size) + target_x, target_y = (float(v) for v in size) if crop or not target_x or not target_y: scale = max(target_x / source_x, target_y / source_y) @@ -65,16 +68,27 @@ def scale_and_crop_with_subject_location(im, size, subject_location=False, elif not target_y: target_y = source_y * scale + if zoom: + if not crop: + target_x = round(source_x * scale) + target_y = round(source_y * scale) + scale *= (100 + int(zoom)) / 100.0 + if scale < 1.0 or (scale > 1.0 and upscale): - im = im.resize((int(source_x * scale), int(source_y * scale)), - resample=Image.ANTIALIAS) + try: + im = im.resize((int(source_x * scale), int(source_y * scale)), + resample=Image.LANCZOS) + except AttributeError: # pragma: no cover + im = im.resize((int(source_x * scale), int(source_y * scale)), + resample=Image.ANTIALIAS) + # --endsnip-- begin real code # =============================== # subject location aware cropping # =============================== # res_x, res_y: the resolution of the possibly already resized image - res_x, res_y = [float(v) for v in im.size] + res_x, res_y = (float(v) for v in im.size) # subj_x, subj_y: the position of the subject (maybe already re-scaled) subj_x = res_x * float(subject_location[0]) / source_x @@ -110,10 +124,37 @@ def scale_and_crop_with_subject_location(im, size, subject_location=False, if ex or ey: crop_box = ((int(tex), int(tey), int(tfx), int(tfy))) if FILER_SUBJECT_LOCATION_IMAGE_DEBUG: - # draw elipse on focal point for Debugging + # draw ellipse on focal point for Debugging draw = ImageDraw.Draw(im) esize = 10 draw.ellipse(((subj_x - esize, subj_y - esize), (subj_x + esize, subj_y + esize)), outline="#FF0000") im = im.crop(crop_box) return im + + +def whitespace(image, size, whitespace=False, whitespace_color=None, **kwargs): + if not whitespace: + return image + + if whitespace_color is None: + whitespace_color = FILER_WHITESPACE_COLOR + if whitespace_color is None: + whitespace_color = '#fff' + + old_image = image + source_x, source_y = image.size + target_x, target_y = size + + image = Image.new('RGBA', (target_x, target_y), whitespace_color) + if source_x < target_x and source_y < target_y: # whitespace all around + image.paste(old_image, ( + (target_x - source_x) / 2, (target_y - source_y) / 2)) + elif source_x < target_x: # whitespace on top and bottom only + image.paste(old_image, ((target_x - source_x) / 2, 0)) + elif source_y < target_y: # whitespace on sides only + image.paste(old_image, (0, (target_y - source_y) / 2)) + else: # no whitespace needed + image = old_image + + return image diff --git a/filer/urls.py b/filer/urls.py new file mode 100644 index 000000000..f8fccf4a1 --- /dev/null +++ b/filer/urls.py @@ -0,0 +1,13 @@ +from django.urls import path + +from . import settings as filer_settings +from . import views + + +urlpatterns = [ + path( + filer_settings.FILER_CANONICAL_URL + '//', + views.canonical, + name='canonical' + ), +] diff --git a/filer/utils/compatibility.py b/filer/utils/compatibility.py new file mode 100644 index 000000000..0c7fd5290 --- /dev/null +++ b/filer/utils/compatibility.py @@ -0,0 +1,33 @@ +from django.utils.functional import keep_lazy +from django.utils.text import Truncator, format_lazy + + +def string_concat(*strings): + return format_lazy('{}' * len(strings), *strings) + + +def truncate_words(s, num, end_text='...'): + # truncate_words was removed in Django 1.5. + truncate = end_text and ' %s' % end_text or '' + return Truncator(s).words(num, truncate=truncate) + + +truncate_words = keep_lazy(truncate_words, str) + + +def get_delete_permission(opts): + from django.contrib.auth import get_permission_codename + return '{}.{}'.format(opts.app_label, get_permission_codename('delete', opts)) + + +try: + from PIL import ExifTags as PILExifTags + from PIL import Image as PILImage + from PIL import ImageDraw as PILImageDraw +except ImportError: + try: + import ExifTags as PILExifTags # noqa + import Image as PILImage # noqa + import ImageDraw as PILImageDraw # noqa + except ImportError: + raise ImportError("The Python Imaging Library was not found.") diff --git a/filer/utils/filer_easy_thumbnails.py b/filer/utils/filer_easy_thumbnails.py index 2ee1f7d0d..00b2f4b43 100644 --- a/filer/utils/filer_easy_thumbnails.py +++ b/filer/utils/filer_easy_thumbnails.py @@ -1,8 +1,9 @@ -#-*- coding: utf-8 -*- -from easy_thumbnails.files import Thumbnailer import os import re +from easy_thumbnails.files import Thumbnailer + + # match the source filename using `__` as the seperator. ``opts_and_ext`` is non # greedy so it should match the last occurence of `__`. # in ``ThumbnailerNameMixin.get_thumbnail_name`` we ensure that there is no `__` @@ -17,20 +18,24 @@ def thumbnail_to_original_filename(thumbnail_name): return None -class ThumbnailerNameMixin(object): +class ThumbnailerNameMixin: thumbnail_basedir = '' thumbnail_subdir = '' thumbnail_prefix = '' - def get_thumbnail_name(self, thumbnail_options, transparent=False, - high_resolution=False): + def get_thumbnail_name(self, thumbnail_options, transparent=False): """ A version of ``Thumbnailer.get_thumbnail_name`` that produces a reproducible thumbnail name that can be converted back to the original filename. """ path, source_filename = os.path.split(self.name) - if transparent: + source_extension = os.path.splitext(source_filename)[1][1:].lower() + preserve_extensions = self.thumbnail_preserve_extensions + if preserve_extensions is True or source_extension == 'svg' or \ + isinstance(preserve_extensions, (list, tuple)) and source_extension in preserve_extensions: + extension = source_extension + elif transparent: extension = self.thumbnail_transparency_extension else: extension = self.thumbnail_extension @@ -38,35 +43,36 @@ def get_thumbnail_name(self, thumbnail_options, transparent=False, thumbnail_options = thumbnail_options.copy() size = tuple(thumbnail_options.pop('size')) + initial_opts = ['{}x{}'.format(*size)] quality = thumbnail_options.pop('quality', self.thumbnail_quality) - initial_opts = ['%sx%s' % size, 'q%s' % quality] + if extension == 'jpg': + initial_opts.append(f'q{quality}') + elif extension == 'svg': + thumbnail_options.pop('subsampling', None) + thumbnail_options.pop('upscale', None) opts = list(thumbnail_options.items()) opts.sort() # Sort the options so the file name is consistent. - opts = ['%s' % (v is not True and '%s-%s' % (k, v) or k) + opts = ['{}'.format(v is not True and f'{k}-{v}' or k) for k, v in opts if v] - all_opts = '_'.join(initial_opts + opts) basedir = self.thumbnail_basedir subdir = self.thumbnail_subdir - #make sure our magic delimiter is not used in all_opts + # make sure our magic delimiter is not used in all_opts all_opts = all_opts.replace('__', '_') - if high_resolution: - all_opts += '@2x' - filename = '%s__%s.%s' % (source_filename, all_opts, extension) + filename = f'{source_filename}__{all_opts}.{extension}' return os.path.join(basedir, path, subdir, filename) -class ActionThumbnailerMixin(object): +class ActionThumbnailerMixin: thumbnail_basedir = '' thumbnail_subdir = '' thumbnail_prefix = '' - def get_thumbnail_name(self, thumbnail_options, transparent=False, - high_resolution=False): + def get_thumbnail_name(self, thumbnail_options, transparent=False): """ A version of ``Thumbnailer.get_thumbnail_name`` that returns the original filename to resize. @@ -85,7 +91,7 @@ def thumbnail_exists(self, thumbnail_name): class FilerThumbnailer(ThumbnailerNameMixin, Thumbnailer): def __init__(self, *args, **kwargs): self.thumbnail_basedir = kwargs.pop('thumbnail_basedir', '') - super(FilerThumbnailer, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) class FilerActionThumbnailer(ActionThumbnailerMixin, Thumbnailer): diff --git a/filer/utils/files.py b/filer/utils/files.py index 74d1c9d3e..16a887a75 100644 --- a/filer/utils/files.py +++ b/filer/utils/files.py @@ -1,53 +1,152 @@ -#-*- coding: utf-8 -*- -import os import mimetypes +import os +import uuid +from django.http.multipartparser import ChunkIter, SkipFile, StopFutureHandlers, StopUpload, exhaust +from django.template.defaultfilters import slugify as slugify_django +from django.utils.encoding import force_str from django.utils.text import get_valid_filename as get_valid_filename_django -from django.template.defaultfilters import slugify -from django.core.files.uploadedfile import SimpleUploadedFile - -from filer.settings import FILER_FILE_MODELS -from filer.utils.loader import load_object -from filer.utils.is_ajax import is_ajax -import filetype - class UploadException(Exception): pass def handle_upload(request): - if not request.method == "POST": - raise UploadException("AJAX request not valid: must be POST") - if is_ajax(request): + if not request.method == 'POST': + raise UploadException("XMLHttpRequest not valid: must be POST") + if request.headers.get('x-requested-with') == 'XMLHttpRequest': # the file is stored raw in the request is_raw = True filename = request.GET.get('qqfile', False) or request.GET.get('filename', False) or '' - if hasattr(request, 'body'): - # raw_post_data was depreciated in django 1.4: - # https://docs.djangoproject.com/en/dev/releases/1.4/#httprequest-raw-post-data-renamed-to-httprequest-body - data = request.body - elif hasattr(request, 'raw_post_data'): - # fallback for django 1.3 - data = request.raw_post_data + + try: + content_length = int(request.headers['content-length']) + except (IndexError, TypeError, ValueError): + content_length = None + + if content_length < 0: + # This means we shouldn't continue...raise an error. + raise UploadException("Invalid content length: %r" % content_length) + + mime_type = mimetypes.guess_type(filename)[0] or 'application/octet-stream' + + upload_handlers = request.upload_handlers + for handler in upload_handlers: + handler.handle_raw_input(request, + request.META, + content_length, + None, + None) + pass + + # For compatibility with low-level network APIs (with 32-bit integers), + # the chunk size should be < 2^31, but still divisible by 4. + possible_sizes = [x.chunk_size for x in upload_handlers if x.chunk_size] + chunk_size = min([2 ** 31 - 4] + possible_sizes) + + stream = ChunkIter(request, chunk_size) + counters = [0] * len(upload_handlers) + + try: + for handler in upload_handlers: + try: + handler.new_file(None, filename, + None, content_length, None) + except StopFutureHandlers: + break + + for chunk in stream: + for i, handler in enumerate(upload_handlers): + chunk_length = len(chunk) + chunk = handler.receive_data_chunk(chunk, + counters[i]) + counters[i] += chunk_length + if chunk is None: + # If the chunk received by the handler is None, then don't continue. + break + + except SkipFile: + # Just use up the rest of this file... + exhaust(stream) + except StopUpload as e: + if not e.connection_reset: + exhaust(request) else: - raise UploadException("Request is not valid: there is no request body.") - mime_type = mimetypes.guess_type(filename)[0] or "text/plain" - upload = SimpleUploadedFile(name=filename, content=data, content_type=mime_type) + # Make sure that the request data is all fed + exhaust(request) + + # Signal that the upload has completed. + for handler in upload_handlers: + retval = handler.upload_complete() + if retval: + break + + for i, handler in enumerate(upload_handlers): + file_obj = handler.file_complete(counters[i]) + if file_obj: + upload = file_obj + break else: if len(request.FILES) == 1: - # FILES is a dictionary in Django but Ajax Upload gives the uploaded file an - # ID based on a random number, so it cannot be guessed here in the code. - # Rather than editing Ajax Upload to pass the ID in the querystring, note that - # each upload is a separate request so FILES should only have one entry. - # Thus, we can just grab the first (and only) value in the dict. - is_raw = False - upload = list(request.FILES.values())[0] - filename = upload.name + upload, filename, is_raw, mime_type = handle_request_files_upload(request) else: - raise UploadException("AJAX request not valid: Bad Upload") - return upload, filename, is_raw + raise UploadException("XMLHttpRequest request not valid: Bad Upload") + return upload, filename, is_raw, mime_type + + +def handle_request_files_upload(request): + """ + Handle request.FILES if len(request.FILES) == 1. + Returns tuple(upload, filename, is_raw, mime_type) where upload is file itself. + """ + # FILES is a dictionary in Django but Ajax Upload gives the uploaded file + # an ID based on a random number, so it cannot be guessed here in the code. + # Rather than editing Ajax Upload to pass the ID in the querystring, + # note that each upload is a separate request so FILES should only + # have one entry. + # Thus, we can just grab the first (and only) value in the dict. + is_raw = False + upload = list(request.FILES.values())[0] + filename = upload.name + _, iext = os.path.splitext(filename) + mime_type = upload.content_type.lower() + extensions = mimetypes.guess_all_extensions(mime_type) + if mime_type != 'application/octet-stream' and extensions and iext.lower() not in extensions: + msg = "MIME-Type '{mimetype}' does not correspond to file extension of {filename}." + raise UploadException(msg.format(mimetype=mime_type, filename=filename)) + return upload, filename, is_raw, mime_type + + +def slugify(string): + return slugify_django(force_str(string)) + + +def _ensure_safe_length(filename, max_length=155, random_suffix_length=16): + """ + Ensures that the filename does not exceed the maximum allowed length. + If it does, the function truncates the filename and appends a random hexadecimal + suffix of length `random_suffix_length` to ensure uniqueness and compliance with + database constraints - even after markers for a thumbnail are added. + + Parameters: + filename (str): The filename to check. + max_length (int): The maximum allowed length for the filename. + random_suffix_length (int): The length of the random suffix to append. + + Returns: + str: The safe filename. + + + Reference issue: https://github.com/django-cms/django-filer/issues/1270 + """ + + if len(filename) <= max_length: + return filename + + keep_length = max_length - random_suffix_length + random_suffix = uuid.uuid4().hex[:random_suffix_length] + return filename[:keep_length] + random_suffix def get_valid_filename(s): @@ -55,42 +154,55 @@ def get_valid_filename(s): like the regular get_valid_filename, but also slugifies away umlauts and stuff. """ - if not s: - return '' s = get_valid_filename_django(s) filename, ext = os.path.splitext(s) filename = slugify(filename) ext = slugify(ext) if ext: - return "%s.%s" % (filename, ext) + valid_filename = "{}.{}".format(filename, ext) else: - return "%s" % (filename,) + valid_filename = "{}".format(filename) + + # Ensure the filename meets the maximum length requirements. + return _ensure_safe_length(valid_filename) +# PBS-specific: file type matching and filename utilities + def matching_file_subtypes(filename, file_pointer, request): """ Returns a list of valid subtypes for a given file. """ - types = list(map(load_object, FILER_FILE_MODELS)) + from ..settings import FILER_FILE_MODELS + from .loader import load_model + + types = [] + for model_path in FILER_FILE_MODELS: + types.append(load_model(model_path)) def _match_subtype(subtype): - is_match = subtype.matches_file_type(filename, file_pointer, request) - return is_match + return subtype.matches_file_type(filename, file_pointer, request) type_matches = list(filter(_match_subtype, types)) return type_matches def truncate_filename(upload, maxlen=None): """ - Return truncated filename - Pre-extension filename will be less than or equals maxlen(if passed) + Return truncated filename. + Pre-extension filename will be less than or equals maxlen (if passed). """ + try: + import filetype as filetype_lib + except ImportError: + filetype_lib = None + title, extension = os.path.splitext(upload.name) if not extension.lstrip('.'): - guessed = filetype.guess_extension(upload) or '' - # filetype reads bytes from the upload; seek back for later use - if hasattr(upload, 'seek'): - upload.seek(0) + guessed = '' + if filetype_lib is not None: + guessed = filetype_lib.guess_extension(upload) or '' + if hasattr(upload, 'seek'): + upload.seek(0) else: guessed = '' filename = '{title}.{ext}'.format(title=title[:maxlen], diff --git a/filer/utils/generate_filename.py b/filer/utils/generate_filename.py index 14b6f8874..5d107ce35 100644 --- a/filer/utils/generate_filename.py +++ b/filer/utils/generate_filename.py @@ -1,20 +1,28 @@ -import datetime import os -import filer - -from filer.utils.files import get_valid_filename +import uuid from django.core.exceptions import ObjectDoesNotExist from django.core.files.uploadedfile import UploadedFile -from django.utils.encoding import smart_str +from django.utils.encoding import force_str +from django.utils.timezone import now + +import filer + +from .files import get_valid_filename def by_date(instance, filename): - datepart = str(datetime.datetime.now().strftime(smart_str("%Y/%m/%d"))) + datepart = force_str(now().strftime("%Y/%m/%d")) return os.path.join(datepart, get_valid_filename(filename)) -class prefixed_factory(object): +def randomized(instance, filename): + uuid_str = str(uuid.uuid4()) + return os.path.join(uuid_str[0:2], uuid_str[2:4], uuid_str, + get_valid_filename(filename)) + + +class prefixed_factory: def __init__(self, upload_to, prefix): self.upload_to = upload_to self.prefix = prefix @@ -29,6 +37,8 @@ def __call__(self, instance, filename): return os.path.join(self.prefix, upload_to_str) +# PBS-specific: path-based filename generation + def _is_in_memory(file_): return isinstance(file_, UploadedFile) @@ -61,8 +71,6 @@ def by_path(instance, filename): def get_trash_path(instance): path = [filer.settings.FILER_TRASH_PREFIX] - # enforce uniqueness by using file's pk path.append("%s" % instance.pk) - # add folder path path.append(instance.pretty_logical_path.strip('/')) return os.path.join(*path) diff --git a/filer/utils/is_ajax.py b/filer/utils/is_ajax.py deleted file mode 100644 index 63166d793..000000000 --- a/filer/utils/is_ajax.py +++ /dev/null @@ -1,3 +0,0 @@ -def is_ajax(request): - """Checks if a request is ajax.""" - return request.headers.get('x-requested-with') == 'XMLHttpRequest' diff --git a/filer/utils/loader.py b/filer/utils/loader.py index 89a841ae3..b75f8f4d6 100644 --- a/filer/utils/loader.py +++ b/filer/utils/loader.py @@ -1,4 +1,3 @@ -#-*- coding: utf-8 -*- """ This function is snatched from https://github.com/ojii/django-load/blob/3058ab9d9d4875589638cc45e84b59e7e1d7c9c3/django_load/core.py#L49 @@ -8,6 +7,7 @@ or method. """ + from importlib import import_module @@ -30,13 +30,20 @@ def load_object(import_path): return import_path if '.' not in import_path: raise TypeError( - "'import_path' argument to 'django_load.core.load_object' " +\ - "must contain at least one dot.") + "'import_path' argument to 'django_load.core.load_object' must " + "contain at least one dot.") module_name, object_name = import_path.rsplit('.', 1) module = import_module(module_name) return getattr(module, object_name) +def load_model(model_name): + from django.apps import apps + + model_name_tuple = model_name.split('.') + return apps.get_model(*model_name_tuple) + + def storage_factory(klass, location, base_url): """ This factory returns an instance of the storage class provided. diff --git a/filer/utils/model_label.py b/filer/utils/model_label.py index f488cf67f..93cc66809 100644 --- a/filer/utils/model_label.py +++ b/filer/utils/model_label.py @@ -1,15 +1,17 @@ def get_model_label(model): """ Take a model class or model label and return its model label. + >>> get_model_label(MyModel) "myapp.MyModel" + >>> get_model_label("myapp.MyModel") "myapp.MyModel" """ if isinstance(model, str): return model else: - return "%s.%s" % ( + return "{}.{}".format( model._meta.app_label, model.__name__ ) diff --git a/filer/utils/pil_exif.py b/filer/utils/pil_exif.py index 0d0077b77..f0280e4aa 100644 --- a/filer/utils/pil_exif.py +++ b/filer/utils/pil_exif.py @@ -1,35 +1,29 @@ -#-*- coding: utf-8 -*- -try: - from PIL import Image - from PIL import ExifTags -except ImportError: - try: - import Image - import ExifTags - except ImportError: - raise ImportError("The Python Imaging Library was not found.") +from django.core.files.storage import default_storage as storage + +from ..utils.compatibility import PILExifTags, PILImage def get_exif(im): try: exif_raw = im._getexif() or {} - except: + except Exception: + # Not available? Return empty dict return {} ret = {} for tag, value in list(exif_raw.items()): - decoded = ExifTags.TAGS.get(tag, tag) + decoded = PILExifTags.TAGS.get(tag, tag) ret[decoded] = value return ret def get_exif_for_file(file_obj): - im = Image.open(file_obj, 'r') + im = PILImage.open(storage.open(file_obj.name), 'r') return get_exif(im) def get_subject_location(exif_data): try: r = (int(exif_data['SubjectLocation'][0]), int(exif_data['SubjectLocation'][1]),) - except: + except KeyError: r = None return r diff --git a/filer/utils/recursive_dictionary.py b/filer/utils/recursive_dictionary.py index cd49eaa3b..01ad34be0 100644 --- a/filer/utils/recursive_dictionary.py +++ b/filer/utils/recursive_dictionary.py @@ -1,5 +1,3 @@ -#-*- coding: utf-8 -*- - # https://gist.github.com/114831 # recursive_dictionary.py # Created 2009-05-20 by Jannis Andrija Schnitzer. @@ -24,8 +22,10 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. + __author__ = 'jannis@itisme.org (Jannis Andrija Schnitzer)' + class RecursiveDictionary(dict): """RecursiveDictionary provides the methods rec_update and iter_rec_update that can be used to update member dictionaries rather than overwriting @@ -41,11 +41,11 @@ def rec_update(self, other, **third): {'foo': {'baz': 36, 'bar': 42}} """ try: - iterator = list(other.items()) + iterator = other.items() except AttributeError: iterator = other self.iter_rec_update(iterator) - self.iter_rec_update(list(third.items())) + self.iter_rec_update(third.items()) def iter_rec_update(self, iterator): for (key, value) in iterator: @@ -65,7 +65,7 @@ class RecursiveDictionaryWithExcludes(RecursiveDictionary): """ def __init__(self, *args, **kwargs): self.rec_excluded_keys = kwargs.pop('rec_excluded_keys', ()) - super(RecursiveDictionaryWithExcludes, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def iter_rec_update(self, iterator): for (key, value) in iterator: @@ -76,4 +76,4 @@ def iter_rec_update(self, iterator): rec_excluded_keys=self.rec_excluded_keys) self[key].rec_update(value) else: - self[key] = value \ No newline at end of file + self[key] = value diff --git a/filer/validation.py b/filer/validation.py new file mode 100644 index 000000000..4a34d85d1 --- /dev/null +++ b/filer/validation.py @@ -0,0 +1,115 @@ +import typing + +from django.apps import apps +from django.contrib.auth import get_user_model +from django.core.exceptions import ValidationError +from django.utils.translation import gettext as _ + + +User = get_user_model() # Needed for typing + + +class FileValidationError(ValidationError): + pass + + +def deny(file_name: str, file: typing.IO, owner: User, mime_type: str) -> None: + file_type = file_name.rsplit(".")[-1] + if file_type == file_name: + raise FileValidationError( + _('File "{file_name}": Upload denied by site security policy').format(file_name=file_name) + ) + raise FileValidationError( + _('File "{file_name}": {file_type} upload denied by site security policy').format( + file_name=file_name, + file_type=file_type.upper() + ) + ) + + +def deny_html(file_name: str, file: typing.IO, owner: User, mime_type: str) -> None: + """Simple validator that denies all files. Separate for HTML since .html and .htm are both + common suffixes for text/html files.""" + raise FileValidationError( + _('File "{file_name}": HTML upload denied by site security policy').format(file_name=file_name) + ) + + +TRIGGER_XSS_THREAD = ( + # Part 1: Event attributes that take js code as values + # See https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/Events + b"onbegin=", b"onend=", b"onrepeat=", + b"onabort=", b"onerror=", b"onresize=", b"onscroll=", b"onunload=", + b"oncopy=", b"oncut=", b"onpaste=", + b"oncancel=", b"oncanplay=", b"oncanplaythrough=", b"onchange=", b"onclick=", b"onclose=", b"oncuechange=", b"ondblclick=", + b"ondrag=", b"ondragend=", b"ondragenter=", b"ondragleave=", b"ondragover=", b"ondragstart=", b"ondrop=", + b"ondurationchange=", b"onemptied=", b"onended=", b"onerror=", b"onfocus=", b"oninput=", b"oninvalid=", + b"onkeydown=", b"onkeypress=", b"onkeyup=", b"onload=", b"onloadeddata=", b"onloadedmetadata=", b"onloadstart=", + b"onmousedown=", b"onmouseenter=", b"onmouseleave=", b"onmousemove=", b"onmouseout=", b"onmouseover=", b"onmouseup=", + b"onmousewheel=", b"onpause=", b"onplay=", b"onplaying=", b"onprogress=", b"onratechange=", b"onreset=", b"onresize=", + b"onscroll=", b"onseeked=", b"onseeking=", b"onselect=", b"onshow=", b"onstalled=", b"onsubmit=", b"onsuspend=", + b"ontimeupdate=", b"ontoggle==", b"onvolumechange==", b"onwaiting=", + b"onactivate=", b"onfocusin=", b"onfocusout=", +) + ( + # Part 2: + # Reject base64 obfuscated content + b";base64,", +) + ( + # Part 3: Obvious scripts + # Reject direct tags or javascript: uri + b" None: + """SVG files must not contain script tags or javascript hrefs. + This might be too strict but avoids parsing the xml""" + content = file.read().lower() + if any(map(lambda x: x in content, TRIGGER_XSS_THREAD)): + # If any element of TRIGGER_XSS_THREAD is found in file, raise FileValidationError + raise FileValidationError( + _('File "{file_name}": Rejected due to potential cross site scripting vulnerability') + .format(file_name=file_name) + ) + + +def sanitize_svg(file_name: str, file: typing.IO, owner: User, mime_type: str) -> None: + from easy_thumbnails.VIL.Image import Image + from reportlab.graphics import renderSVG + from svglib.svglib import svg2rlg + drawing = svg2rlg(file) + if not drawing: + raise FileValidationError( + _('File "{file_name}": SVG file format not recognized') + .format(file_name=file_name) + ) + image = Image(size=(drawing.width, drawing.height)) + renderSVG.draw(drawing, image.canvas) + xml = image.canvas.svg.toxml(encoding="UTF-8") # Removes non-graphic nodes -> sanitation + file.seek(0) # Rewind file + file.write(xml) # write to binary file with utf-8 encoding + + +def validate_upload(file_name: str, file: typing.IO, owner: User, mime_type: str) -> None: + """Actual validation: Call all validators for the given mime type. The app config reads + the validators from the settings and replaces dotted paths by callables.""" + + config = apps.get_app_config("filer") + + # First, check white list if provided + if config.MIME_TYPE_WHITELIST: + # FILER_MIME_TYPE_WHITELIST restricts the allowed mime types to, e.g., "image/*" or "text/plain" + for allowed_mime_type in config.MIME_TYPE_WHITELIST: + if mime_type == allowed_mime_type: + break + elif "/" in allowed_mime_type and [mime_type.split("/")[0], "*"] == allowed_mime_type.split("/", 1): + break + else: + # No match found <=> no break in for loop? Deny file + deny(file_name, file, owner, mime_type) + + # Second, check upload validators + if mime_type in config.FILE_VALIDATORS: + for validator in config.FILE_VALIDATORS[mime_type]: + validator(file_name, file, owner, mime_type) diff --git a/filer/views.py b/filer/views.py index 9bf2a04a6..8e23fe03b 100755 --- a/filer/views.py +++ b/filer/views.py @@ -1,4 +1,9 @@ -#-*- coding: utf-8 -*- +from django.http import Http404 +from django.shortcuts import get_object_or_404, redirect + + +# --- PBS-specific view helpers --- + def popup_status(request): return ('_popup' in request.GET or '_popup' in request.POST or 'pop' in request.GET or 'pop' in request.POST) @@ -21,12 +26,14 @@ def selectfolder_param(request, separator="&"): else: return "" + def current_site_param(request, separator="&"): current_site = get_param_from_request(request, 'current_site') if current_site: return '%scurrent_site=%s' % (separator, current_site) return "" + def file_type_param(request, separator="&"): param = get_param_from_request(request, 'file_type') if param: @@ -36,3 +43,16 @@ def file_type_param(request, separator="&"): def get_param_from_request(request, param, default=None): return request.POST.get(param) or request.GET.get(param) or default + + +# --- Upstream canonical view --- + +def canonical(request, uploaded_at, file_id): + """ + Redirect to the current url of a public file + """ + from .models import File + filer_file = get_object_or_404(File, pk=file_id, is_public=True) + if (not filer_file.file or int(uploaded_at) != filer_file.canonical_time): + raise Http404('No %s matches the given query.' % File._meta.object_name) + return redirect(filer_file.url) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..6f7e6ca58 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,108 @@ +[build-system] +requires = ["setuptools>=45", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "django-filer" +dynamic = ["version"] +authors = [ + {name = "Divio AG", email = "info@divio.ch"}, +] +maintainers = [ + {name = "Django CMS Association and contributors", email = "info@django-cms.org"}, + {name = "PBS"}, +] +description = "A file management application for django that makes handling of files and images a breeze." +readme = "README.rst" +license = {text = "BSD-3-Clause"} +requires-python = ">=3.10" +dependencies = [ + "django>=5.1,<5.2", + "django-mptt>=0.6,<1.0", + "django-polymorphic>=4.0.0", + "django-js-asset>=2.0.0", + "easy-thumbnails[svg]>=2,<3.0", + "Unidecode>=0.04,<1.2", + "filetype", + + # Pin svglib to a version below 1.6.0. + # The latest version (1.6.0) adds pycairo as a dependency, + # which requires system-level libraries and fails to install in the container. + # This can be removed once the issue is resolved. + # See: https://github.com/deeplook/svglib/issues/421 + "svglib~=1.5.1", +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Framework :: Django", + "Framework :: Django :: 5.1", + "Topic :: Internet :: WWW/HTTP", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", +] + +[project.optional-dependencies] +s3 = [ + "boto3", + "django-storages", +] +heif = ["pillow-heif"] + +[project.urls] +Homepage = "https://github.com/pbs/django-filer" + +[tool.setuptools] +include-package-data = true +zip-safe = false + +[tool.setuptools.packages.find] +where = ["."] +include = ["filer*", "LICENSE"] + +[tool.setuptools.package-data] +"*" = [ + "templates/**/*.html", + "static/**/*", + "locale/**/*", + "*.po", + "*.mo", +] + +[tool.setuptools.dynamic] +version = {attr = "filer.__version__"} + +[tool.flake8] +max-line-length = 119 +exclude = [ + "*.egg-info", + ".eggs", + ".env", + ".git", + ".settings", + ".tox", + ".venv", + "build", + "data", + "dist", + "docs", + "*migrations*", + "tmp", + "node_modules", +] +ignore = ["E251", "E128", "E501", "W503"] + +[tool.ruff] +src = ["filer"] +exclude = ["*/migrations/*"] +line-length = 119