From 4565069f93bfd1c9d54e031036b4f4e23f1d4e70 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:36:36 +0000 Subject: [PATCH 1/6] Phase 1-2: Foundation, build system, and non-conflicting upstream additions Agent-Logs-Url: https://github.com/pbs/django-filer/sessions/cad30a66-0889-48ba-bb3e-2ab3bf2939b2 Co-authored-by: andreilupuleasa <124138251+andreilupuleasa@users.noreply.github.com> --- filer/__init__.py | 17 +- filer/admin/permissionadmin.py | 56 ++++ filer/admin/permissions.py | 48 +++ filer/admin/thumbnailoptionadmin.py | 5 + filer/admin/views.py | 131 ++++++++ filer/apps.py | 61 ++++ filer/cache.py | 91 ++++++ filer/contrib/__init__.py | 0 filer/contrib/clamav/__init__.py | 0 filer/contrib/django_cms/__init__.py | 0 filer/contrib/django_cms/cms_toolbars.py | 51 ++++ filer/management/commands/filer_check.py | 183 ++++++++++++ .../commands/generate_thumbnails.py | 28 ++ filer/models/abstract.py | 282 ++++++++++++++++++ filer/models/thumbnailoptionmodels.py | 61 ++++ filer/urls.py | 13 + filer/utils/compatibility.py | 33 ++ filer/validation.py | 115 +++++++ filer/views.py | 22 +- pyproject.toml | 108 +++++++ 20 files changed, 1301 insertions(+), 4 deletions(-) create mode 100644 filer/admin/permissionadmin.py create mode 100644 filer/admin/permissions.py create mode 100644 filer/admin/thumbnailoptionadmin.py create mode 100644 filer/admin/views.py create mode 100644 filer/cache.py create mode 100644 filer/contrib/__init__.py create mode 100644 filer/contrib/clamav/__init__.py create mode 100644 filer/contrib/django_cms/__init__.py create mode 100644 filer/contrib/django_cms/cms_toolbars.py create mode 100644 filer/management/commands/filer_check.py create mode 100644 filer/management/commands/generate_thumbnails.py create mode 100644 filer/models/abstract.py create mode 100644 filer/models/thumbnailoptionmodels.py create mode 100644 filer/urls.py create mode 100644 filer/utils/compatibility.py create mode 100644 filer/validation.py create mode 100644 pyproject.toml 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/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/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/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/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/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/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/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 From d901d184a23a99c866029129b0673dc5cec408d6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:44:10 +0000 Subject: [PATCH 2/6] Phase 3+5: Merge core models (filemodels, foldermodels, mixins, imagemodels, clipboardmodels, virtualitems) and settings Agent-Logs-Url: https://github.com/pbs/django-filer/sessions/cad30a66-0889-48ba-bb3e-2ab3bf2939b2 Co-authored-by: andreilupuleasa <124138251+andreilupuleasa@users.noreply.github.com> --- filer/models/__init__.py | 20 +- filer/models/clipboardmodels.py | 50 ++- filer/models/filemodels.py | 495 +++++++++++++++++------------- filer/models/foldermodels.py | 523 ++++++++++++++++++++++++-------- filer/models/imagemodels.py | 221 +++----------- filer/models/mixins.py | 17 +- filer/models/virtualitems.py | 23 +- filer/settings.py | 233 +++++++++----- 8 files changed, 948 insertions(+), 634 deletions(-) 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/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/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/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 From 602b3f43f148c9b4a30fb7cb2febd4da4de1cdd2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:48:46 +0000 Subject: [PATCH 3/6] Phase 4+6+7: Merge admin, fields, and utilities with PBS customizations preserved Agent-Logs-Url: https://github.com/pbs/django-filer/sessions/cad30a66-0889-48ba-bb3e-2ab3bf2939b2 Co-authored-by: andreilupuleasa <124138251+andreilupuleasa@users.noreply.github.com> --- filer/admin/__init__.py | 45 +- filer/admin/clipboardadmin.py | 294 ++-- filer/admin/fileadmin.py | 248 ++- filer/admin/folderadmin.py | 1964 +++++++++++------------- filer/admin/forms.py | 58 +- filer/admin/imageadmin.py | 130 +- filer/admin/patched/__init__.py | 2 - filer/admin/patched/admin_utils.py | 104 +- filer/admin/tools.py | 233 +-- filer/fields/file.py | 164 +- filer/fields/folder.py | 121 +- filer/fields/image.py | 12 +- filer/fields/multistorage_file.py | 128 +- filer/server/backends/base.py | 33 +- filer/server/backends/default.py | 17 +- filer/server/backends/nginx.py | 13 +- filer/server/backends/xsendfile.py | 12 +- filer/server/main_server_urls.py | 4 +- filer/server/thumbnails_server_urls.py | 4 +- filer/server/urls.py | 18 +- filer/server/views.py | 28 +- filer/templatetags/filer_admin_tags.py | 318 ++-- filer/templatetags/filer_image_tags.py | 45 +- filer/templatetags/filer_tags.py | 14 +- filer/templatetags/filermedia.py | 16 - filer/thumbnail_processors.py | 69 +- filer/utils/filer_easy_thumbnails.py | 40 +- filer/utils/files.py | 200 ++- filer/utils/generate_filename.py | 26 +- filer/utils/is_ajax.py | 3 - filer/utils/loader.py | 13 +- filer/utils/model_label.py | 4 +- filer/utils/multi_model_qs.py | 49 - filer/utils/pil_exif.py | 22 +- filer/utils/recursive_dictionary.py | 12 +- filer/utils/zip.py | 26 - 36 files changed, 2446 insertions(+), 2043 deletions(-) delete mode 100644 filer/templatetags/filermedia.py delete mode 100644 filer/utils/is_ajax.py delete mode 100644 filer/utils/multi_model_qs.py delete mode 100644 filer/utils/zip.py 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/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/tools.py b/filer/admin/tools.py index 1995b905b..d7eeceebf 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,104 +152,22 @@ 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 + Returns a queryset with folders that current user can see. """ - 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 - """ - # 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)) - - 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) - else: - # never show unfiled in popup - sites_q &= Q(folder__isnull=False) - - return files_qs.exclude(unfiled_in_clipboard).filter(sites_q).distinct() + core_folders = Q(folder_type=Folder.CORE_FOLDER) + shared_folders = Q(shared__in=available_sites) + accessible_site_folders = Q(site__in=available_sites) - -def has_multi_file_action_permission(request, files, folders): - # 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 - - if files.readonly(user).exists() or folders.readonly(user).exists(): - return False if user.is_superuser: - return True - - if files.restricted(user).exists(): - return False - - if folders.restricted_descendants(user).exists(): - return False - - # only superusers can move/delete files/folders with no site ownership - if (files.filter(folder__site__isnull=True).exists() or - folders.filter(site__isnull=True).exists()): - return False - - _exists_root_folders = folders.filter(parent__isnull=True).exists() - 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)] + # 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: - sites_allowed = get_sites_for_user(user) - - if (files.exclude(folder__site__in=sites_allowed).exists() or - folders.exclude(site__in=sites_allowed).exists()): - return False + visible = core_folders | shared_folders | accessible_site_folders - return True + return folders_qs.filter(visible).distinct() diff --git a/filer/fields/file.py b/filer/fields/file.py index e43b56871..0223440b9 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,29 +119,19 @@ 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) - - -class NonClearableFileInput(django_widgets.AdminFileWidget): - template_with_clear = '' + return super().formfield(**defaults) 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/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/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/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/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..4af97c241 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,53 @@ 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. """ + from ..settings import FILER_FILE_MODELS + from .loader import load_object + types = list(map(load_object, FILER_FILE_MODELS)) 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/multi_model_qs.py b/filer/utils/multi_model_qs.py deleted file mode 100644 index e87227ab5..000000000 --- a/filer/utils/multi_model_qs.py +++ /dev/null @@ -1,49 +0,0 @@ -from functools import reduce - - -class MultiMoldelQuerysetChain(object): - """ - Allows passing a list of different models querysets to a paginator without - transforming them into one list. - """ - - def __init__(self, qsets): - self._qsets = qsets - self._offsets = [] - offset = 0 - for q in qsets: - self._offsets.append(offset) - offset += q.count() - self.length = offset - - def __getitem__(self, key): - if isinstance(key, slice): - return self._get_slice(key) - elif isinstance(key, int): - return self._get_item(key) - else: - raise TypeError("QuerysetChain index must be int or slice not {}".format(type(key))) - - def _get_item(self, key): - if key < 0: - raise IndexError("index out of bounds {}".format(key)) - for index, offset in enumerate(self._offsets): - qset = self._qsets[index] - if key-offset < qset.count(): - return qset[key-offset] - raise IndexError("index out of bounds {}".format(key)) - - def _get_slice(self, key): - assert key.start is not None - assert key.stop is not None - assert key.step is None - slices = (self.slice(qs, key.start-offset, key.stop-offset) - for qs, offset in zip(self._qsets, self._offsets)) - return reduce(lambda s1, s2: s1+s2, slices) - - def slice(self, qset, start, stop): - start, stop = max(start, 0), max(stop, 0) - return list(qset[start:stop]) - - def __len__(self): - return self.length 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/utils/zip.py b/filer/utils/zip.py deleted file mode 100644 index e6b1e3b29..000000000 --- a/filer/utils/zip.py +++ /dev/null @@ -1,26 +0,0 @@ -#-*- coding: utf-8 -*- -#import zipfile -# zipfile.open() is only available in Python 2.6, so we use the future version -from django.core.files.uploadedfile import SimpleUploadedFile -from zipfile import ZipFile - - -def unzip(file_obj): - """ - Take a path to a zipfile and checks if it is a valid zip file - and returns... - """ - files = [] - # TODO: implement try-except here - zip = ZipFile(file_obj) - bad_file = zip.testzip() - if bad_file: - raise Exception('"%s" in the .zip archive is corrupt.' % bad_file) - infolist = zip.infolist() - for zipinfo in infolist: - if zipinfo.filename.startswith('__'): # do not process meta files - continue - file_obj = SimpleUploadedFile(name=zipinfo.filename, content=zip.read(zipinfo)) - files.append((file_obj, zipinfo.filename)) - zip.close() - return files From 848acee4a607f0662233cba32db7ba32dc467d2c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:53:30 +0000 Subject: [PATCH 4/6] Phase 8: Generate migration 0008 for upstream schema changes (ThumbnailOption, FolderPermission, mime_type, etc.) Agent-Logs-Url: https://github.com/pbs/django-filer/sessions/cad30a66-0889-48ba-bb3e-2ab3bf2939b2 Co-authored-by: andreilupuleasa <124138251+andreilupuleasa@users.noreply.github.com> --- =5.1 | 518 ++++++++++++++++++ filer/admin/common_admin.py | 4 +- filer/admin/tools.py | 42 ++ filer/fields/file.py | 8 + ...nailoption_alter_image_options_and_more.py | 137 +++++ filer/utils/multi_model_qs.py | 49 ++ 6 files changed, 756 insertions(+), 2 deletions(-) create mode 100644 =5.1 create mode 100644 filer/migrations/0008_thumbnailoption_alter_image_options_and_more.py create mode 100644 filer/utils/multi_model_qs.py diff --git a/=5.1 b/=5.1 new file mode 100644 index 000000000..7488124a1 --- /dev/null +++ b/=5.1 @@ -0,0 +1,518 @@ +Defaulting to user installation because normal site-packages is not writeable +Collecting django + Downloading django-6.0.4-py3-none-any.whl.metadata (3.9 kB) +Collecting django-mptt + Downloading django_mptt-0.18.0-py3-none-any.whl.metadata (5.3 kB) +Collecting django-polymorphic + Downloading django_polymorphic-4.11.2-py3-none-any.whl.metadata (7.7 kB) +Collecting django-js-asset + Downloading django_js_asset-3.1.2-py3-none-any.whl.metadata (6.4 kB) +Collecting easy-thumbnails + Downloading easy_thumbnails-2.10.1-py3-none-any.whl.metadata (15 kB) +Collecting Unidecode + Downloading Unidecode-1.4.0-py3-none-any.whl.metadata (13 kB) +Collecting filetype + Downloading filetype-1.2.0-py2.py3-none-any.whl.metadata (6.5 kB) +Collecting svglib + Downloading svglib-1.6.0-py3-none-any.whl.metadata (11 kB) +Collecting Pillow + Downloading pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (8.8 kB) +Collecting asgiref>=3.9.1 (from django) + Downloading asgiref-3.11.1-py3-none-any.whl.metadata (9.3 kB) +Collecting sqlparse>=0.5.0 (from django) + Downloading sqlparse-0.5.5-py3-none-any.whl.metadata (4.7 kB) +Collecting typing-extensions>=4.12.0 (from django-polymorphic) + Downloading typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB) +Collecting cssselect2>=0.2.0 (from svglib) + Downloading cssselect2-0.9.0-py3-none-any.whl.metadata (2.9 kB) +Collecting lxml>=6.0.0 (from svglib) + Downloading lxml-6.1.0-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.metadata (4.0 kB) +Collecting reportlab>=4.4.3 (from svglib) + Downloading reportlab-4.5.0-py3-none-any.whl.metadata (1.7 kB) +Collecting rlpycairo>=0.4.0 (from svglib) + Downloading rlpycairo-0.4.0-py3-none-any.whl.metadata (4.9 kB) +Collecting tinycss2>=0.6.0 (from svglib) + Downloading tinycss2-1.5.1-py3-none-any.whl.metadata (3.0 kB) +Collecting webencodings (from cssselect2>=0.2.0->svglib) + Downloading webencodings-0.5.1-py2.py3-none-any.whl.metadata (2.1 kB) +Collecting charset-normalizer (from reportlab>=4.4.3->svglib) + Downloading charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.9/40.9 kB 14.8 MB/s eta 0:00:00 +Collecting pycairo>=1.20.0 (from rlpycairo>=0.4.0->svglib) + Downloading pycairo-1.29.0.tar.gz (665 kB) + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 665.9/665.9 kB 23.9 MB/s eta 0:00:00 + Installing build dependencies: started + Installing build dependencies: finished with status 'done' + Getting requirements to build wheel: started + Getting requirements to build wheel: finished with status 'done' + Preparing metadata (pyproject.toml): started + Preparing metadata (pyproject.toml): finished with status 'error' + error: subprocess-exited-with-error + + × Preparing metadata (pyproject.toml) did not run successfully. + │ exit code: 1 + ╰─> [454 lines of output] + + meson setup /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667 /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dwheel=true -Dtests=false --native-file=/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-python-native-file.ini + The Meson build system + Version: 1.11.1 + Source dir: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667 + Build dir: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b + Build type: native build + Project name: pycairo + Project version: 1.29.0 + C compiler for the host machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0") + C linker for the host machine: cc ld.bfd 2.42 + Host machine cpu family: x86_64 + Host machine cpu: x86_64 + Program python3 found: YES (/usr/bin/python3) + Compiler for C supports arguments -Wall: YES + Compiler for C supports arguments -Warray-bounds: YES + Compiler for C supports arguments -Wcast-align: YES + Compiler for C supports arguments -Wconversion: YES + Compiler for C supports arguments -Wextra: YES + Compiler for C supports arguments -Wformat=2: YES + Compiler for C supports arguments -Wformat-nonliteral: YES + Compiler for C supports arguments -Wformat-security: YES + Compiler for C supports arguments -Wimplicit-function-declaration: YES + Compiler for C supports arguments -Winit-self: YES + Compiler for C supports arguments -Wmissing-format-attribute: YES + Compiler for C supports arguments -Wmissing-noreturn: YES + Compiler for C supports arguments -Wnested-externs: YES + Compiler for C supports arguments -Wold-style-definition: YES + Compiler for C supports arguments -Wpacked: YES + Compiler for C supports arguments -Wpointer-arith: YES + Compiler for C supports arguments -Wreturn-type: YES + Compiler for C supports arguments -Wshadow: YES + Compiler for C supports arguments -Wsign-compare: YES + Compiler for C supports arguments -Wstrict-aliasing: YES + Compiler for C supports arguments -Wundef: YES + Compiler for C supports arguments -Wunused-but-set-variable: YES + Compiler for C supports arguments -Wswitch-default: YES + Compiler for C supports arguments -Wno-missing-field-initializers: YES + Compiler for C supports arguments -Wno-unused-parameter: YES + Compiler for C supports arguments -fno-strict-aliasing: YES + Compiler for C supports arguments -fvisibility=hidden: YES + Found pkg-config: YES (/usr/bin/pkg-config) 1.8.1 + Found CMake: /usr/local/bin/cmake (3.31.6) + Run-time dependency cairo found: NO (tried pkg-config and cmake) + + ../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found (tried pkg-config and cmake) + + A full log can be found at /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-logs/meson-log.txt + ::group::==== CI platform detected, click here for meson-log.txt contents. ==== + Build started at 2026-04-30T09:49:25.394376 + Main binary: /usr/bin/python3 + Build Options: -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dwheel=true -Dtests=false --native-file=/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-python-native-file.ini + Python system: Linux + The Meson build system + Version: 1.11.1 + Source dir: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667 + Build dir: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b + Build type: native build + Project name: pycairo + Project version: 1.29.0 + ----------- + Detecting compiler via: `cc --version` -> 0 + stdout: + cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 + Copyright (C) 2023 Free Software Foundation, Inc. + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + ----------- + Running command: -cpp -x c -E -dM - + ----- + ----------- + Detecting linker via: `cc -Wl,--version` -> 0 + stdout: + GNU ld (GNU Binutils for Ubuntu) 2.42 + Copyright (C) 2024 Free Software Foundation, Inc. + This program is free software; you may redistribute it under the terms of + the GNU General Public License version 3 or (at your option) a later version. + This program has absolutely no warranty. + ----------- + stderr: + collect2 version 13.3.0 + /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccxnZMDU.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. --version -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + ----------- + Sanity check compiler command line: cc -D_FILE_OFFSET_BITS=64 -o sanity_check_for_c.exe sanity_check_for_c.c -D_FILE_OFFSET_BITS=64 + Sanity check compile stdout: + + ----- + Sanity check compile stderr: + + ----- + Sanity check built target output for host machine c compiler + -- Running test binary command: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/sanity_check_for_c.exe + ----------- + Sanity check: `/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/sanity_check_for_c.exe` -> 0 + -- stdout: + + -- stderr: + + -- returncode: 0 + C compiler for the host machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0") + C linker for the host machine: cc ld.bfd 2.42 + ----------- + Detecting archiver via: `gcc-ar --version` -> 0 + stdout: + GNU ar (GNU Binutils for Ubuntu) 2.42 + Copyright (C) 2024 Free Software Foundation, Inc. + This program is free software; you may redistribute it under the terms of + the GNU General Public License version 3 or (at your option) any later version. + This program has absolutely no warranty. + ----------- + ----------- + Detecting compiler via: `cc --version` -> 0 + stdout: + cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 + Copyright (C) 2023 Free Software Foundation, Inc. + This is free software; see the source for copying conditions. There is NO + warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + ----------- + Running command: -cpp -x c -E -dM - + ----- + ----------- + Detecting linker via: `cc -Wl,--version` -> 0 + stdout: + GNU ld (GNU Binutils for Ubuntu) 2.42 + Copyright (C) 2024 Free Software Foundation, Inc. + This program is free software; you may redistribute it under the terms of + the GNU General Public License version 3 or (at your option) a later version. + This program has absolutely no warranty. + ----------- + stderr: + collect2 version 13.3.0 + /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccxwrsCc.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. --version -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + ----------- + Sanity check compiler command line: cc -D_FILE_OFFSET_BITS=64 -o sanity_check_for_c.exe sanity_check_for_c.c -D_FILE_OFFSET_BITS=64 + Sanity check compile stdout: + + ----- + Sanity check compile stderr: + + ----- + Sanity check built target output for build machine c compiler + -- Running test binary command: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/sanity_check_for_c.exe + ----------- + Sanity check: `/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/sanity_check_for_c.exe` -> 0 + -- stdout: + + -- stderr: + + -- returncode: 0 + C compiler for the build machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0") + C linker for the build machine: cc ld.bfd 2.42 + Build machine cpu family: x86_64 + Build machine cpu: x86_64 + Host machine cpu family: x86_64 + Host machine cpu: x86_64 + Target machine cpu family: x86_64 + Target machine cpu: x86_64 + Program python3 found: YES (/usr/bin/python3) + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpq10ufb7l + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpq10ufb7l/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpq10ufb7l/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wall` -> 0 + Compiler for C supports arguments -Wall: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp8qts2n5l + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp8qts2n5l/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp8qts2n5l/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Warray-bounds` -> 0 + Compiler for C supports arguments -Warray-bounds: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpg8nrnjvb + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpg8nrnjvb/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpg8nrnjvb/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wcast-align` -> 0 + Compiler for C supports arguments -Wcast-align: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpahi5_xug + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpahi5_xug/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpahi5_xug/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wconversion` -> 0 + Compiler for C supports arguments -Wconversion: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpvetn92u9 + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpvetn92u9/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpvetn92u9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wextra` -> 0 + Compiler for C supports arguments -Wextra: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp591nhuze + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp591nhuze/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp591nhuze/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wformat=2` -> 0 + Compiler for C supports arguments -Wformat=2: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr5lad1fi + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr5lad1fi/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr5lad1fi/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wformat-nonliteral` -> 0 + Compiler for C supports arguments -Wformat-nonliteral: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpduqdxvjc + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpduqdxvjc/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpduqdxvjc/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wformat-security` -> 0 + Compiler for C supports arguments -Wformat-security: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr2cg9qgk + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr2cg9qgk/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr2cg9qgk/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wimplicit-function-declaration` -> 0 + Compiler for C supports arguments -Wimplicit-function-declaration: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpv65xtow9 + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpv65xtow9/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpv65xtow9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Winit-self` -> 0 + Compiler for C supports arguments -Winit-self: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp82mly3km + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp82mly3km/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp82mly3km/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wmissing-format-attribute` -> 0 + Compiler for C supports arguments -Wmissing-format-attribute: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpfaswcrni + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpfaswcrni/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpfaswcrni/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wmissing-noreturn` -> 0 + Compiler for C supports arguments -Wmissing-noreturn: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmps5n97jul + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmps5n97jul/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmps5n97jul/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wnested-externs` -> 0 + Compiler for C supports arguments -Wnested-externs: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpkcvs47pl + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpkcvs47pl/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpkcvs47pl/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wold-style-definition` -> 0 + Compiler for C supports arguments -Wold-style-definition: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp089e1gxr + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp089e1gxr/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp089e1gxr/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wpacked` -> 0 + Compiler for C supports arguments -Wpacked: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp5vsuim0z + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp5vsuim0z/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp5vsuim0z/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wpointer-arith` -> 0 + Compiler for C supports arguments -Wpointer-arith: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppw3tn4mm + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppw3tn4mm/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppw3tn4mm/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wreturn-type` -> 0 + Compiler for C supports arguments -Wreturn-type: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpdyednray + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpdyednray/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpdyednray/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wshadow` -> 0 + Compiler for C supports arguments -Wshadow: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppzs14kt9 + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppzs14kt9/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppzs14kt9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wsign-compare` -> 0 + Compiler for C supports arguments -Wsign-compare: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpim1xzoce + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpim1xzoce/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpim1xzoce/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wstrict-aliasing` -> 0 + Compiler for C supports arguments -Wstrict-aliasing: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp2rcs89un + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp2rcs89un/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp2rcs89un/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wundef` -> 0 + Compiler for C supports arguments -Wundef: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpye9rfxe9 + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpye9rfxe9/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpye9rfxe9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wunused-but-set-variable` -> 0 + Compiler for C supports arguments -Wunused-but-set-variable: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpgt0j7j7o + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpgt0j7j7o/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpgt0j7j7o/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wswitch-default` -> 0 + Compiler for C supports arguments -Wswitch-default: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpuy8j9o8g + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpuy8j9o8g/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpuy8j9o8g/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wmissing-field-initializers -Wno-missing-field-initializers` -> 0 + Compiler for C supports arguments -Wno-missing-field-initializers: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp206a43mw + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp206a43mw/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp206a43mw/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wunused-parameter -Wno-unused-parameter` -> 0 + Compiler for C supports arguments -Wno-unused-parameter: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp98e0ru46 + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp98e0ru46/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp98e0ru46/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -fno-strict-aliasing` -> 0 + Compiler for C supports arguments -fno-strict-aliasing: YES + Running compile: + Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpz771h1xa + Code: + extern int i; + int i; + + ----------- + Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpz771h1xa/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpz771h1xa/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -fvisibility=hidden` -> 0 + Compiler for C supports arguments -fvisibility=hidden: YES + Pkg-config binary missing from cross or native file, or env var undefined. + Trying a default Pkg-config fallback at pkg-config + Found pkg-config: YES (/usr/bin/pkg-config) 1.8.1 + Determining dependency 'cairo' with pkg-config executable '/usr/bin/pkg-config' + env[PKG_CONFIG_PATH]: + env[PKG_CONFIG]: /usr/bin/pkg-config + ----------- + Called: `/usr/bin/pkg-config --modversion cairo` -> 1 + stderr: + Package cairo was not found in the pkg-config search path. + Perhaps you should add the directory containing `cairo.pc' + to the PKG_CONFIG_PATH environment variable + Package 'cairo', required by 'virtual:world', not found + ----------- + CMake binary for host machine is not cached + CMake binary missing from cross or native file, or env var undefined. + Trying a default CMake fallback at cmake + Found CMake: /usr/local/bin/cmake (3.31.6) + Extracting basic cmake information + CMake Toolchain: Calling CMake once to generate the compiler state + Calling CMake (['/usr/local/bin/cmake']) in /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/__CMake_compiler_info__ with: + - "--trace-expand" + - "--trace-format=json-v1" + - "--no-warn-unused-cli" + - "--trace-redirect=cmake_trace.txt" + - "-G" + - "Ninja" + - "-DCMAKE_TOOLCHAIN_FILE=/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/__CMake_compiler_info__/CMakeMesonTempToolchainFile.cmake" + - "." + CMake trace warning: add_executable() non imported executables are not supported + CMake TRACE: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/__CMake_compiler_info__/CMakeFiles/CMakeScratch/TryCompile-5br5r6/CMakeLists.txt:22 add_executable(['cmTC_68a78']) + CMake trace warning: target_link_libraries() TARGET cmTC_68a78 not found + CMake TRACE: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/__CMake_compiler_info__/CMakeFiles/CMakeScratch/TryCompile-5br5r6/CMakeLists.txt:28 target_link_libraries(['cmTC_68a78', '']) + !meson_ci!/ci_include "/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/cmake_cairo/CMakeMesonToolchainFile.cmake" + Try CMake generator: auto + !meson_ci!/ci_include "/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/cmake_cairo/CMakeLists.txt" + Calling CMake (['/usr/local/bin/cmake']) in /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/cmake_cairo with: + - "--trace-expand" + - "--trace-format=json-v1" + - "--no-warn-unused-cli" + - "--trace-redirect=cmake_trace.txt" + - "-DCMAKE_TOOLCHAIN_FILE=/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/cmake_cairo/CMakeMesonToolchainFile.cmake" + - "." + -- Module search paths: ['/', '/opt', '/usr', '/usr/local'] + -- CMake root: /usr/local/share/cmake-3.31 + -- CMake architectures: ['x86_64-linux-gnu'] + -- CMake lib search paths: ['lib', 'lib32', 'lib64', 'libx32', 'share', '', 'lib/x86_64-linux-gnu'] + Preliminary CMake check failed. Aborting. + Run-time dependency cairo found: NO (tried pkg-config and cmake) + + ../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found (tried pkg-config and cmake) + + ::endgroup:: + + [end of output] + + note: This error originates from a subprocess, and is likely not a problem with pip. +error: metadata-generation-failed + +× Encountered error while generating package metadata. +╰─> See above for output. + +note: This is an issue with the package mentioned above, not pip. +hint: See above for details. 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/tools.py b/filer/admin/tools.py index d7eeceebf..66a75dd8c 100644 --- a/filer/admin/tools.py +++ b/filer/admin/tools.py @@ -171,3 +171,45 @@ def folders_available(current_site, user, folders_qs): visible = core_folders | shared_folders | accessible_site_folders 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 + files = files.exclude(folder__isnull=True) + user = request.user + + if files.readonly(user).exists() or folders.readonly(user).exists(): + return False + if user.is_superuser: + return True + + if files.restricted(user).exists(): + return False + + if folders.restricted_descendants(user).exists(): + return False + + # only superusers can move/delete files/folders with no site ownership + if (files.filter(folder__site__isnull=True).exists() or + folders.filter(site__isnull=True).exists()): + return False + + _exists_root_folders = folders.filter(parent__isnull=True).exists() + if _exists_root_folders: + if not has_admin_role(user): + return False + sites_allowed = [s.id for s in get_admin_sites_for_user(user)] + else: + sites_allowed = get_sites_for_user(user) + + if (files.exclude(folder__site__in=sites_allowed).exists() or + folders.exclude(site__in=sites_allowed).exists()): + return False + + return True diff --git a/filer/fields/file.py b/filer/fields/file.py index 0223440b9..7fb4bf6b8 100644 --- a/filer/fields/file.py +++ b/filer/fields/file.py @@ -135,3 +135,11 @@ def formfield(self, **kwargs): } defaults.update(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): + template_with_clear = '' 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/utils/multi_model_qs.py b/filer/utils/multi_model_qs.py new file mode 100644 index 000000000..e87227ab5 --- /dev/null +++ b/filer/utils/multi_model_qs.py @@ -0,0 +1,49 @@ +from functools import reduce + + +class MultiMoldelQuerysetChain(object): + """ + Allows passing a list of different models querysets to a paginator without + transforming them into one list. + """ + + def __init__(self, qsets): + self._qsets = qsets + self._offsets = [] + offset = 0 + for q in qsets: + self._offsets.append(offset) + offset += q.count() + self.length = offset + + def __getitem__(self, key): + if isinstance(key, slice): + return self._get_slice(key) + elif isinstance(key, int): + return self._get_item(key) + else: + raise TypeError("QuerysetChain index must be int or slice not {}".format(type(key))) + + def _get_item(self, key): + if key < 0: + raise IndexError("index out of bounds {}".format(key)) + for index, offset in enumerate(self._offsets): + qset = self._qsets[index] + if key-offset < qset.count(): + return qset[key-offset] + raise IndexError("index out of bounds {}".format(key)) + + def _get_slice(self, key): + assert key.start is not None + assert key.stop is not None + assert key.step is None + slices = (self.slice(qs, key.start-offset, key.stop-offset) + for qs, offset in zip(self._qsets, self._offsets)) + return reduce(lambda s1, s2: s1+s2, slices) + + def slice(self, qset, start, stop): + start, stop = max(start, 0), max(stop, 0) + return list(qset[start:stop]) + + def __len__(self): + return self.length From ea8f30039fce6324c741c71303ec732737e389af Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 09:59:44 +0000 Subject: [PATCH 5/6] Phase 9-10: Adopt upstream templates/static/locale, fix import issues, restore needed PBS utils Agent-Logs-Url: https://github.com/pbs/django-filer/sessions/cad30a66-0889-48ba-bb3e-2ab3bf2939b2 Co-authored-by: andreilupuleasa <124138251+andreilupuleasa@users.noreply.github.com> --- =5.1 | 518 ------- filer/locale/ar/LC_MESSAGES/django.mo | Bin 0 -> 520 bytes filer/locale/ar/LC_MESSAGES/django.po | 1245 +++++++++++++++ filer/locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 440 bytes filer/locale/bg/LC_MESSAGES/django.po | 1224 +++++++++++++++ filer/locale/ca/LC_MESSAGES/django.mo | Bin 0 -> 16627 bytes filer/locale/ca/LC_MESSAGES/django.po | 1261 ++++++++++++++++ filer/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 16442 bytes filer/locale/cs/LC_MESSAGES/django.po | 1265 ++++++++++++++++ filer/locale/de/LC_MESSAGES/django.mo | Bin 0 -> 21636 bytes filer/locale/de/LC_MESSAGES/django.po | 1244 +++++++++++++++ filer/locale/en/LC_MESSAGES/django.mo | Bin 458 -> 15724 bytes filer/locale/en/LC_MESSAGES/django.po | 1341 +++++++++++------ filer/locale/es/LC_MESSAGES/django.mo | Bin 0 -> 20427 bytes filer/locale/es/LC_MESSAGES/django.po | 1296 ++++++++++++++++ filer/locale/et/LC_MESSAGES/django.mo | Bin 479 -> 5456 bytes filer/locale/et/LC_MESSAGES/django.po | 1150 +++++++++----- filer/locale/eu/LC_MESSAGES/django.mo | Bin 0 -> 11064 bytes filer/locale/eu/LC_MESSAGES/django.po | 1241 +++++++++++++++ filer/locale/fa/LC_MESSAGES/django.mo | Bin 0 -> 21668 bytes filer/locale/fa/LC_MESSAGES/django.po | 1045 +++++++++++++ filer/locale/fi/LC_MESSAGES/django.mo | Bin 0 -> 16713 bytes filer/locale/fi/LC_MESSAGES/django.po | 1259 ++++++++++++++++ filer/locale/fr/LC_MESSAGES/django.mo | Bin 16758 -> 22139 bytes filer/locale/fr/LC_MESSAGES/django.po | 1292 ++++++++++------ filer/locale/gl/LC_MESSAGES/django.mo | Bin 0 -> 3830 bytes filer/locale/gl/LC_MESSAGES/django.po | 1228 +++++++++++++++ filer/locale/he/LC_MESSAGES/django.mo | Bin 0 -> 14347 bytes filer/locale/he/LC_MESSAGES/django.po | 1249 +++++++++++++++ filer/locale/hr/LC_MESSAGES/django.mo | Bin 0 -> 13374 bytes filer/locale/hr/LC_MESSAGES/django.po | 1265 ++++++++++++++++ filer/locale/hu/LC_MESSAGES/django.mo | Bin 0 -> 16819 bytes filer/locale/hu/LC_MESSAGES/django.po | 1258 ++++++++++++++++ filer/locale/it/LC_MESSAGES/django.mo | Bin 16237 -> 17229 bytes filer/locale/it/LC_MESSAGES/django.po | 1189 +++++++++------ filer/locale/ja/LC_MESSAGES/django.mo | Bin 0 -> 432 bytes filer/locale/ja/LC_MESSAGES/django.po | 1219 +++++++++++++++ filer/locale/ja_JP/LC_MESSAGES/django.mo | Bin 0 -> 446 bytes filer/locale/ja_JP/LC_MESSAGES/django.po | 1219 +++++++++++++++ filer/locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 17336 bytes filer/locale/lt/LC_MESSAGES/django.po | 1273 ++++++++++++++++ filer/locale/lt_LT/LC_MESSAGES/django.mo | Bin 0 -> 590 bytes filer/locale/lt_LT/LC_MESSAGES/django.po | 1236 +++++++++++++++ filer/locale/nb/LC_MESSAGES/django.mo | Bin 0 -> 12700 bytes filer/locale/nb/LC_MESSAGES/django.po | 1256 +++++++++++++++ filer/locale/nl_NL/LC_MESSAGES/django.mo | Bin 0 -> 21260 bytes filer/locale/nl_NL/LC_MESSAGES/django.po | 1245 +++++++++++++++ filer/locale/nn/LC_MESSAGES/django.mo | Bin 0 -> 12594 bytes filer/locale/nn/LC_MESSAGES/django.po | 1253 +++++++++++++++ filer/locale/pl/LC_MESSAGES/django.mo | Bin 4616 -> 17155 bytes filer/locale/pl/LC_MESSAGES/django.po | 1299 ++++++++++------ filer/locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 492 bytes filer/locale/pt/LC_MESSAGES/django.po | 1230 +++++++++++++++ filer/locale/pt_BR/LC_MESSAGES/django.mo | Bin 5630 -> 17504 bytes filer/locale/pt_BR/LC_MESSAGES/django.po | 1284 ++++++++++------ filer/locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 21137 bytes filer/locale/ru/LC_MESSAGES/django.po | 1263 ++++++++++++++++ filer/locale/sk/LC_MESSAGES/django.mo | Bin 0 -> 512 bytes filer/locale/sk/LC_MESSAGES/django.po | 1235 +++++++++++++++ filer/locale/tr/LC_MESSAGES/django.mo | Bin 0 -> 7360 bytes filer/locale/tr/LC_MESSAGES/django.po | 1230 +++++++++++++++ filer/locale/vi_VN/LC_MESSAGES/django.mo | Bin 0 -> 18089 bytes filer/locale/vi_VN/LC_MESSAGES/django.po | 1252 +++++++++++++++ filer/locale/zh-Hans/LC_MESSAGES/django.mo | Bin 0 -> 15264 bytes filer/locale/zh-Hans/LC_MESSAGES/django.po | 1208 +++++++++++++++ filer/locale/zh/LC_MESSAGES/django.mo | Bin 0 -> 431 bytes filer/locale/zh/LC_MESSAGES/django.po | 1219 +++++++++++++++ filer/locale/zh_CN/LC_MESSAGES/django.mo | Bin 0 -> 445 bytes filer/locale/zh_CN/LC_MESSAGES/django.po | 1219 +++++++++++++++ filer/locale/zh_TW/LC_MESSAGES/django.mo | Bin 0 -> 446 bytes filer/locale/zh_TW/LC_MESSAGES/django.po | 1219 +++++++++++++++ .../filer/css/admin_filer.cms.icons.css | 1 + filer/static/filer/css/admin_filer.css | 3 + .../static/filer/css/admin_filer.fa.icons.css | 4 + .../filer/css/admin_folderpermissions.css | 6 + .../css/maps/admin_filer.cms.icons.css.map | 1 + .../static/filer/css/maps/admin_filer.css.map | 1 + .../css/maps/admin_filer.fa.icons.css.map | 1 + filer/static/filer/fonts/FontAwesome.otf | Bin 0 -> 106260 bytes .../filer/fonts/django-filer-iconfont.eot | Bin 0 -> 3860 bytes .../filer/fonts/django-filer-iconfont.svg | 51 + .../filer/fonts/django-filer-iconfont.ttf | Bin 0 -> 3640 bytes .../filer/fonts/django-filer-iconfont.woff | Bin 0 -> 2224 bytes .../filer/fonts/django-filer-iconfont.woff2 | Bin 0 -> 1680 bytes .../filer/fonts/fontawesome-webfont.eot | Bin 0 -> 68875 bytes .../filer/fonts/fontawesome-webfont.svg | 640 ++++++++ .../filer/fonts/fontawesome-webfont.ttf | Bin 0 -> 138204 bytes .../filer/fonts/fontawesome-webfont.woff | Bin 0 -> 81284 bytes .../filer/fonts/fontawesome-webfont.woff2 | Bin 0 -> 64464 bytes filer/static/filer/fonts/src/arrow-down.svg | 41 + filer/static/filer/fonts/src/caret-down.svg | 3 + .../static/filer/fonts/src/chevron-right.svg | 3 + filer/static/filer/fonts/src/download.svg | 4 + filer/static/filer/fonts/src/expand.svg | 3 + filer/static/filer/fonts/src/link.svg | 4 + .../static/filer/fonts/src/move-to-folder.svg | 3 + filer/static/filer/fonts/src/picture.svg | 4 + .../filer/fonts/src/remove-selection.svg | 3 + filer/static/filer/fonts/src/select.svg | 3 + filer/static/filer/fonts/src/th-large.svg | 3 + filer/static/filer/fonts/src/th-list.svg | 5 + filer/static/filer/fonts/src/upload.svg | 3 + filer/static/filer/icons/cloud-up.svg | 8 + filer/static/filer/icons/file-audio.svg | 11 + filer/static/filer/icons/file-empty.svg | 8 + filer/static/filer/icons/file-font.svg | 11 + filer/static/filer/icons/file-missing.svg | 84 ++ filer/static/filer/icons/file-pdf.svg | 11 + filer/static/filer/icons/file-picture.svg | 11 + filer/static/filer/icons/file-unknown.svg | 69 + filer/static/filer/icons/file-video.svg | 8 + filer/static/filer/icons/file-zip.svg | 14 + filer/static/filer/icons/folder-dropdown.svg | 85 ++ filer/static/filer/icons/folder-root.svg | 10 + filer/static/filer/icons/folder-unfiled.svg | 77 + filer/static/filer/icons/folder.svg | 9 + filer/static/filer/img/button-bg.gif | Bin 0 -> 224 bytes filer/static/filer/img/icon_changelink.gif | Bin 0 -> 1178 bytes filer/static/filer/img/icon_deletelink.gif | Bin 0 -> 1200 bytes .../static/filer/js/addons/copy-move-files.js | 32 + filer/static/filer/js/addons/dropdown-menu.js | 249 +++ filer/static/filer/js/addons/dropzone.init.js | 234 +++ .../filer/js/addons/filer_popup_response.js | 22 + filer/static/filer/js/addons/focal-point.js | 253 ++++ .../static/filer/js/addons/popup_handling.js | 137 ++ .../static/filer/js/addons/table-dropzone.js | 282 ++++ filer/static/filer/js/addons/toggler.js | 82 + filer/static/filer/js/addons/tooltip.js | 40 + filer/static/filer/js/addons/upload-button.js | 242 +++ filer/static/filer/js/addons/widget.js | 56 + filer/static/filer/js/base.js | 417 +++++ .../filer/js/widgets/admin-file-widget.js | 30 + .../filer/js/widgets/admin-folder-widget.js | 64 + filer/templates/admin/filer/actions.html | 38 +- filer/templates/admin/filer/base_site.html | 19 +- filer/templates/admin/filer/breadcrumbs.html | 55 +- filer/templates/admin/filer/change_form.html | 86 +- .../admin/filer/delete_confirmation.html | 39 +- .../delete_selected_files_confirmation.html | 80 +- .../templates/admin/filer/dismiss_popup.html | 8 + .../admin/filer/file/change_form.html | 23 + .../admin/filer/file/popup_response.html | 10 + .../admin/filer/folder/change_form.html | 51 +- .../filer/folder/choose_copy_destination.html | 86 +- .../folder/choose_images_resize_options.html | 64 +- .../filer/folder/choose_move_destination.html | 85 +- .../filer/folder/choose_rename_format.html | 104 +- .../admin/filer/folder/directory_listing.html | 341 +++-- .../filer/folder/directory_table_list.html | 256 ++++ .../folder/directory_thumbnail_list.html | 228 +++ .../admin/filer/folder/legacy_listing.html | 265 ++++ .../filer/folder/list_type_switcher.html | 1 + .../admin/filer/folder/new_folder_form.html | 67 +- .../admin/filer/image/change_form.html | 45 +- filer/templates/admin/filer/image/expand.html | 28 + .../admin/filer/templatetags/file_icon.html | 38 + .../filer/tools/clipboard/clipboard.html | 110 +- .../tools/clipboard/clipboard_item_rows.html | 32 +- .../admin/filer/tools/detail_info.html | 55 + .../admin/filer/tools/search_form.html | 50 +- .../admin/filer/widgets/admin_file.html | 100 +- .../admin/filer/widgets/admin_folder.html | 44 +- filer/tests/foo_file.jpg | Bin 0 -> 11200 bytes filer/tests/image_name | Bin 0 -> 11200 bytes filer/tests/new_one.jpg | Bin 0 -> 1119 bytes filer/tests/new_three.jpg | Bin 0 -> 1119 bytes ...sttesttesttesttesttesttesttesttesttest.jpg | Bin 0 -> 11200 bytes filer/utils/files.py | 6 +- filer/utils/zip.py | 26 + test.zip | Bin 0 -> 2538 bytes 170 files changed, 45820 insertions(+), 3895 deletions(-) delete mode 100644 =5.1 create mode 100644 filer/locale/ar/LC_MESSAGES/django.mo create mode 100644 filer/locale/ar/LC_MESSAGES/django.po create mode 100644 filer/locale/bg/LC_MESSAGES/django.mo create mode 100644 filer/locale/bg/LC_MESSAGES/django.po create mode 100644 filer/locale/ca/LC_MESSAGES/django.mo create mode 100644 filer/locale/ca/LC_MESSAGES/django.po create mode 100644 filer/locale/cs/LC_MESSAGES/django.mo create mode 100644 filer/locale/cs/LC_MESSAGES/django.po create mode 100644 filer/locale/de/LC_MESSAGES/django.mo create mode 100644 filer/locale/de/LC_MESSAGES/django.po create mode 100644 filer/locale/es/LC_MESSAGES/django.mo create mode 100644 filer/locale/es/LC_MESSAGES/django.po create mode 100644 filer/locale/eu/LC_MESSAGES/django.mo create mode 100644 filer/locale/eu/LC_MESSAGES/django.po create mode 100644 filer/locale/fa/LC_MESSAGES/django.mo create mode 100644 filer/locale/fa/LC_MESSAGES/django.po create mode 100644 filer/locale/fi/LC_MESSAGES/django.mo create mode 100644 filer/locale/fi/LC_MESSAGES/django.po create mode 100644 filer/locale/gl/LC_MESSAGES/django.mo create mode 100644 filer/locale/gl/LC_MESSAGES/django.po create mode 100644 filer/locale/he/LC_MESSAGES/django.mo create mode 100644 filer/locale/he/LC_MESSAGES/django.po create mode 100644 filer/locale/hr/LC_MESSAGES/django.mo create mode 100644 filer/locale/hr/LC_MESSAGES/django.po create mode 100644 filer/locale/hu/LC_MESSAGES/django.mo create mode 100644 filer/locale/hu/LC_MESSAGES/django.po create mode 100644 filer/locale/ja/LC_MESSAGES/django.mo create mode 100644 filer/locale/ja/LC_MESSAGES/django.po create mode 100644 filer/locale/ja_JP/LC_MESSAGES/django.mo create mode 100644 filer/locale/ja_JP/LC_MESSAGES/django.po create mode 100644 filer/locale/lt/LC_MESSAGES/django.mo create mode 100644 filer/locale/lt/LC_MESSAGES/django.po create mode 100644 filer/locale/lt_LT/LC_MESSAGES/django.mo create mode 100644 filer/locale/lt_LT/LC_MESSAGES/django.po create mode 100644 filer/locale/nb/LC_MESSAGES/django.mo create mode 100644 filer/locale/nb/LC_MESSAGES/django.po create mode 100644 filer/locale/nl_NL/LC_MESSAGES/django.mo create mode 100644 filer/locale/nl_NL/LC_MESSAGES/django.po create mode 100644 filer/locale/nn/LC_MESSAGES/django.mo create mode 100644 filer/locale/nn/LC_MESSAGES/django.po create mode 100644 filer/locale/pt/LC_MESSAGES/django.mo create mode 100644 filer/locale/pt/LC_MESSAGES/django.po create mode 100644 filer/locale/ru/LC_MESSAGES/django.mo create mode 100644 filer/locale/ru/LC_MESSAGES/django.po create mode 100644 filer/locale/sk/LC_MESSAGES/django.mo create mode 100644 filer/locale/sk/LC_MESSAGES/django.po create mode 100644 filer/locale/tr/LC_MESSAGES/django.mo create mode 100644 filer/locale/tr/LC_MESSAGES/django.po create mode 100644 filer/locale/vi_VN/LC_MESSAGES/django.mo create mode 100644 filer/locale/vi_VN/LC_MESSAGES/django.po create mode 100644 filer/locale/zh-Hans/LC_MESSAGES/django.mo create mode 100644 filer/locale/zh-Hans/LC_MESSAGES/django.po create mode 100644 filer/locale/zh/LC_MESSAGES/django.mo create mode 100644 filer/locale/zh/LC_MESSAGES/django.po create mode 100644 filer/locale/zh_CN/LC_MESSAGES/django.mo create mode 100644 filer/locale/zh_CN/LC_MESSAGES/django.po create mode 100644 filer/locale/zh_TW/LC_MESSAGES/django.mo create mode 100644 filer/locale/zh_TW/LC_MESSAGES/django.po create mode 100644 filer/static/filer/css/admin_filer.cms.icons.css create mode 100644 filer/static/filer/css/admin_filer.css create mode 100644 filer/static/filer/css/admin_filer.fa.icons.css create mode 100644 filer/static/filer/css/admin_folderpermissions.css create mode 100644 filer/static/filer/css/maps/admin_filer.cms.icons.css.map create mode 100644 filer/static/filer/css/maps/admin_filer.css.map create mode 100644 filer/static/filer/css/maps/admin_filer.fa.icons.css.map create mode 100644 filer/static/filer/fonts/FontAwesome.otf create mode 100644 filer/static/filer/fonts/django-filer-iconfont.eot create mode 100644 filer/static/filer/fonts/django-filer-iconfont.svg create mode 100644 filer/static/filer/fonts/django-filer-iconfont.ttf create mode 100644 filer/static/filer/fonts/django-filer-iconfont.woff create mode 100644 filer/static/filer/fonts/django-filer-iconfont.woff2 create mode 100644 filer/static/filer/fonts/fontawesome-webfont.eot create mode 100644 filer/static/filer/fonts/fontawesome-webfont.svg create mode 100644 filer/static/filer/fonts/fontawesome-webfont.ttf create mode 100644 filer/static/filer/fonts/fontawesome-webfont.woff create mode 100644 filer/static/filer/fonts/fontawesome-webfont.woff2 create mode 100644 filer/static/filer/fonts/src/arrow-down.svg create mode 100644 filer/static/filer/fonts/src/caret-down.svg create mode 100644 filer/static/filer/fonts/src/chevron-right.svg create mode 100644 filer/static/filer/fonts/src/download.svg create mode 100644 filer/static/filer/fonts/src/expand.svg create mode 100644 filer/static/filer/fonts/src/link.svg create mode 100644 filer/static/filer/fonts/src/move-to-folder.svg create mode 100644 filer/static/filer/fonts/src/picture.svg create mode 100644 filer/static/filer/fonts/src/remove-selection.svg create mode 100644 filer/static/filer/fonts/src/select.svg create mode 100644 filer/static/filer/fonts/src/th-large.svg create mode 100644 filer/static/filer/fonts/src/th-list.svg create mode 100644 filer/static/filer/fonts/src/upload.svg create mode 100644 filer/static/filer/icons/cloud-up.svg create mode 100644 filer/static/filer/icons/file-audio.svg create mode 100644 filer/static/filer/icons/file-empty.svg create mode 100644 filer/static/filer/icons/file-font.svg create mode 100644 filer/static/filer/icons/file-missing.svg create mode 100644 filer/static/filer/icons/file-pdf.svg create mode 100644 filer/static/filer/icons/file-picture.svg create mode 100644 filer/static/filer/icons/file-unknown.svg create mode 100644 filer/static/filer/icons/file-video.svg create mode 100644 filer/static/filer/icons/file-zip.svg create mode 100644 filer/static/filer/icons/folder-dropdown.svg create mode 100644 filer/static/filer/icons/folder-root.svg create mode 100644 filer/static/filer/icons/folder-unfiled.svg create mode 100644 filer/static/filer/icons/folder.svg create mode 100644 filer/static/filer/img/button-bg.gif create mode 100644 filer/static/filer/img/icon_changelink.gif create mode 100644 filer/static/filer/img/icon_deletelink.gif create mode 100644 filer/static/filer/js/addons/copy-move-files.js create mode 100644 filer/static/filer/js/addons/dropdown-menu.js create mode 100644 filer/static/filer/js/addons/dropzone.init.js create mode 100644 filer/static/filer/js/addons/filer_popup_response.js create mode 100644 filer/static/filer/js/addons/focal-point.js create mode 100644 filer/static/filer/js/addons/popup_handling.js create mode 100644 filer/static/filer/js/addons/table-dropzone.js create mode 100644 filer/static/filer/js/addons/toggler.js create mode 100644 filer/static/filer/js/addons/tooltip.js create mode 100644 filer/static/filer/js/addons/upload-button.js create mode 100644 filer/static/filer/js/addons/widget.js create mode 100644 filer/static/filer/js/base.js create mode 100644 filer/static/filer/js/widgets/admin-file-widget.js create mode 100644 filer/static/filer/js/widgets/admin-folder-widget.js create mode 100644 filer/templates/admin/filer/dismiss_popup.html create mode 100644 filer/templates/admin/filer/file/change_form.html create mode 100644 filer/templates/admin/filer/file/popup_response.html create mode 100644 filer/templates/admin/filer/folder/directory_table_list.html create mode 100644 filer/templates/admin/filer/folder/directory_thumbnail_list.html create mode 100644 filer/templates/admin/filer/folder/legacy_listing.html create mode 100644 filer/templates/admin/filer/folder/list_type_switcher.html create mode 100644 filer/templates/admin/filer/image/expand.html create mode 100644 filer/templates/admin/filer/templatetags/file_icon.html create mode 100644 filer/templates/admin/filer/tools/detail_info.html create mode 100644 filer/tests/foo_file.jpg create mode 100644 filer/tests/image_name create mode 100644 filer/tests/new_one.jpg create mode 100644 filer/tests/new_three.jpg create mode 100644 filer/tests/testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.jpg create mode 100644 filer/utils/zip.py create mode 100644 test.zip diff --git a/=5.1 b/=5.1 deleted file mode 100644 index 7488124a1..000000000 --- a/=5.1 +++ /dev/null @@ -1,518 +0,0 @@ -Defaulting to user installation because normal site-packages is not writeable -Collecting django - Downloading django-6.0.4-py3-none-any.whl.metadata (3.9 kB) -Collecting django-mptt - Downloading django_mptt-0.18.0-py3-none-any.whl.metadata (5.3 kB) -Collecting django-polymorphic - Downloading django_polymorphic-4.11.2-py3-none-any.whl.metadata (7.7 kB) -Collecting django-js-asset - Downloading django_js_asset-3.1.2-py3-none-any.whl.metadata (6.4 kB) -Collecting easy-thumbnails - Downloading easy_thumbnails-2.10.1-py3-none-any.whl.metadata (15 kB) -Collecting Unidecode - Downloading Unidecode-1.4.0-py3-none-any.whl.metadata (13 kB) -Collecting filetype - Downloading filetype-1.2.0-py2.py3-none-any.whl.metadata (6.5 kB) -Collecting svglib - Downloading svglib-1.6.0-py3-none-any.whl.metadata (11 kB) -Collecting Pillow - Downloading pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (8.8 kB) -Collecting asgiref>=3.9.1 (from django) - Downloading asgiref-3.11.1-py3-none-any.whl.metadata (9.3 kB) -Collecting sqlparse>=0.5.0 (from django) - Downloading sqlparse-0.5.5-py3-none-any.whl.metadata (4.7 kB) -Collecting typing-extensions>=4.12.0 (from django-polymorphic) - Downloading typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB) -Collecting cssselect2>=0.2.0 (from svglib) - Downloading cssselect2-0.9.0-py3-none-any.whl.metadata (2.9 kB) -Collecting lxml>=6.0.0 (from svglib) - Downloading lxml-6.1.0-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl.metadata (4.0 kB) -Collecting reportlab>=4.4.3 (from svglib) - Downloading reportlab-4.5.0-py3-none-any.whl.metadata (1.7 kB) -Collecting rlpycairo>=0.4.0 (from svglib) - Downloading rlpycairo-0.4.0-py3-none-any.whl.metadata (4.9 kB) -Collecting tinycss2>=0.6.0 (from svglib) - Downloading tinycss2-1.5.1-py3-none-any.whl.metadata (3.0 kB) -Collecting webencodings (from cssselect2>=0.2.0->svglib) - Downloading webencodings-0.5.1-py2.py3-none-any.whl.metadata (2.1 kB) -Collecting charset-normalizer (from reportlab>=4.4.3->svglib) - Downloading charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.9/40.9 kB 14.8 MB/s eta 0:00:00 -Collecting pycairo>=1.20.0 (from rlpycairo>=0.4.0->svglib) - Downloading pycairo-1.29.0.tar.gz (665 kB) - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 665.9/665.9 kB 23.9 MB/s eta 0:00:00 - Installing build dependencies: started - Installing build dependencies: finished with status 'done' - Getting requirements to build wheel: started - Getting requirements to build wheel: finished with status 'done' - Preparing metadata (pyproject.toml): started - Preparing metadata (pyproject.toml): finished with status 'error' - error: subprocess-exited-with-error - - × Preparing metadata (pyproject.toml) did not run successfully. - │ exit code: 1 - ╰─> [454 lines of output] - + meson setup /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667 /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dwheel=true -Dtests=false --native-file=/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-python-native-file.ini - The Meson build system - Version: 1.11.1 - Source dir: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667 - Build dir: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b - Build type: native build - Project name: pycairo - Project version: 1.29.0 - C compiler for the host machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0") - C linker for the host machine: cc ld.bfd 2.42 - Host machine cpu family: x86_64 - Host machine cpu: x86_64 - Program python3 found: YES (/usr/bin/python3) - Compiler for C supports arguments -Wall: YES - Compiler for C supports arguments -Warray-bounds: YES - Compiler for C supports arguments -Wcast-align: YES - Compiler for C supports arguments -Wconversion: YES - Compiler for C supports arguments -Wextra: YES - Compiler for C supports arguments -Wformat=2: YES - Compiler for C supports arguments -Wformat-nonliteral: YES - Compiler for C supports arguments -Wformat-security: YES - Compiler for C supports arguments -Wimplicit-function-declaration: YES - Compiler for C supports arguments -Winit-self: YES - Compiler for C supports arguments -Wmissing-format-attribute: YES - Compiler for C supports arguments -Wmissing-noreturn: YES - Compiler for C supports arguments -Wnested-externs: YES - Compiler for C supports arguments -Wold-style-definition: YES - Compiler for C supports arguments -Wpacked: YES - Compiler for C supports arguments -Wpointer-arith: YES - Compiler for C supports arguments -Wreturn-type: YES - Compiler for C supports arguments -Wshadow: YES - Compiler for C supports arguments -Wsign-compare: YES - Compiler for C supports arguments -Wstrict-aliasing: YES - Compiler for C supports arguments -Wundef: YES - Compiler for C supports arguments -Wunused-but-set-variable: YES - Compiler for C supports arguments -Wswitch-default: YES - Compiler for C supports arguments -Wno-missing-field-initializers: YES - Compiler for C supports arguments -Wno-unused-parameter: YES - Compiler for C supports arguments -fno-strict-aliasing: YES - Compiler for C supports arguments -fvisibility=hidden: YES - Found pkg-config: YES (/usr/bin/pkg-config) 1.8.1 - Found CMake: /usr/local/bin/cmake (3.31.6) - Run-time dependency cairo found: NO (tried pkg-config and cmake) - - ../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found (tried pkg-config and cmake) - - A full log can be found at /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-logs/meson-log.txt - ::group::==== CI platform detected, click here for meson-log.txt contents. ==== - Build started at 2026-04-30T09:49:25.394376 - Main binary: /usr/bin/python3 - Build Options: -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dwheel=true -Dtests=false --native-file=/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-python-native-file.ini - Python system: Linux - The Meson build system - Version: 1.11.1 - Source dir: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667 - Build dir: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b - Build type: native build - Project name: pycairo - Project version: 1.29.0 - ----------- - Detecting compiler via: `cc --version` -> 0 - stdout: - cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 - Copyright (C) 2023 Free Software Foundation, Inc. - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - ----------- - Running command: -cpp -x c -E -dM - - ----- - ----------- - Detecting linker via: `cc -Wl,--version` -> 0 - stdout: - GNU ld (GNU Binutils for Ubuntu) 2.42 - Copyright (C) 2024 Free Software Foundation, Inc. - This program is free software; you may redistribute it under the terms of - the GNU General Public License version 3 or (at your option) a later version. - This program has absolutely no warranty. - ----------- - stderr: - collect2 version 13.3.0 - /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccxnZMDU.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. --version -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o - ----------- - Sanity check compiler command line: cc -D_FILE_OFFSET_BITS=64 -o sanity_check_for_c.exe sanity_check_for_c.c -D_FILE_OFFSET_BITS=64 - Sanity check compile stdout: - - ----- - Sanity check compile stderr: - - ----- - Sanity check built target output for host machine c compiler - -- Running test binary command: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/sanity_check_for_c.exe - ----------- - Sanity check: `/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/sanity_check_for_c.exe` -> 0 - -- stdout: - - -- stderr: - - -- returncode: 0 - C compiler for the host machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0") - C linker for the host machine: cc ld.bfd 2.42 - ----------- - Detecting archiver via: `gcc-ar --version` -> 0 - stdout: - GNU ar (GNU Binutils for Ubuntu) 2.42 - Copyright (C) 2024 Free Software Foundation, Inc. - This program is free software; you may redistribute it under the terms of - the GNU General Public License version 3 or (at your option) any later version. - This program has absolutely no warranty. - ----------- - ----------- - Detecting compiler via: `cc --version` -> 0 - stdout: - cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 - Copyright (C) 2023 Free Software Foundation, Inc. - This is free software; see the source for copying conditions. There is NO - warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - ----------- - Running command: -cpp -x c -E -dM - - ----- - ----------- - Detecting linker via: `cc -Wl,--version` -> 0 - stdout: - GNU ld (GNU Binutils for Ubuntu) 2.42 - Copyright (C) 2024 Free Software Foundation, Inc. - This program is free software; you may redistribute it under the terms of - the GNU General Public License version 3 or (at your option) a later version. - This program has absolutely no warranty. - ----------- - stderr: - collect2 version 13.3.0 - /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccxwrsCc.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. --version -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o - ----------- - Sanity check compiler command line: cc -D_FILE_OFFSET_BITS=64 -o sanity_check_for_c.exe sanity_check_for_c.c -D_FILE_OFFSET_BITS=64 - Sanity check compile stdout: - - ----- - Sanity check compile stderr: - - ----- - Sanity check built target output for build machine c compiler - -- Running test binary command: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/sanity_check_for_c.exe - ----------- - Sanity check: `/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/sanity_check_for_c.exe` -> 0 - -- stdout: - - -- stderr: - - -- returncode: 0 - C compiler for the build machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0") - C linker for the build machine: cc ld.bfd 2.42 - Build machine cpu family: x86_64 - Build machine cpu: x86_64 - Host machine cpu family: x86_64 - Host machine cpu: x86_64 - Target machine cpu family: x86_64 - Target machine cpu: x86_64 - Program python3 found: YES (/usr/bin/python3) - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpq10ufb7l - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpq10ufb7l/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpq10ufb7l/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wall` -> 0 - Compiler for C supports arguments -Wall: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp8qts2n5l - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp8qts2n5l/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp8qts2n5l/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Warray-bounds` -> 0 - Compiler for C supports arguments -Warray-bounds: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpg8nrnjvb - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpg8nrnjvb/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpg8nrnjvb/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wcast-align` -> 0 - Compiler for C supports arguments -Wcast-align: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpahi5_xug - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpahi5_xug/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpahi5_xug/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wconversion` -> 0 - Compiler for C supports arguments -Wconversion: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpvetn92u9 - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpvetn92u9/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpvetn92u9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wextra` -> 0 - Compiler for C supports arguments -Wextra: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp591nhuze - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp591nhuze/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp591nhuze/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wformat=2` -> 0 - Compiler for C supports arguments -Wformat=2: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr5lad1fi - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr5lad1fi/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr5lad1fi/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wformat-nonliteral` -> 0 - Compiler for C supports arguments -Wformat-nonliteral: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpduqdxvjc - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpduqdxvjc/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpduqdxvjc/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wformat-security` -> 0 - Compiler for C supports arguments -Wformat-security: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr2cg9qgk - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr2cg9qgk/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpr2cg9qgk/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wimplicit-function-declaration` -> 0 - Compiler for C supports arguments -Wimplicit-function-declaration: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpv65xtow9 - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpv65xtow9/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpv65xtow9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Winit-self` -> 0 - Compiler for C supports arguments -Winit-self: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp82mly3km - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp82mly3km/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp82mly3km/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wmissing-format-attribute` -> 0 - Compiler for C supports arguments -Wmissing-format-attribute: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpfaswcrni - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpfaswcrni/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpfaswcrni/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wmissing-noreturn` -> 0 - Compiler for C supports arguments -Wmissing-noreturn: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmps5n97jul - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmps5n97jul/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmps5n97jul/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wnested-externs` -> 0 - Compiler for C supports arguments -Wnested-externs: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpkcvs47pl - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpkcvs47pl/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpkcvs47pl/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wold-style-definition` -> 0 - Compiler for C supports arguments -Wold-style-definition: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp089e1gxr - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp089e1gxr/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp089e1gxr/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wpacked` -> 0 - Compiler for C supports arguments -Wpacked: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp5vsuim0z - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp5vsuim0z/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp5vsuim0z/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wpointer-arith` -> 0 - Compiler for C supports arguments -Wpointer-arith: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppw3tn4mm - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppw3tn4mm/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppw3tn4mm/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wreturn-type` -> 0 - Compiler for C supports arguments -Wreturn-type: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpdyednray - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpdyednray/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpdyednray/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wshadow` -> 0 - Compiler for C supports arguments -Wshadow: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppzs14kt9 - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppzs14kt9/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmppzs14kt9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wsign-compare` -> 0 - Compiler for C supports arguments -Wsign-compare: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpim1xzoce - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpim1xzoce/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpim1xzoce/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wstrict-aliasing` -> 0 - Compiler for C supports arguments -Wstrict-aliasing: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp2rcs89un - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp2rcs89un/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp2rcs89un/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wundef` -> 0 - Compiler for C supports arguments -Wundef: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpye9rfxe9 - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpye9rfxe9/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpye9rfxe9/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wunused-but-set-variable` -> 0 - Compiler for C supports arguments -Wunused-but-set-variable: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpgt0j7j7o - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpgt0j7j7o/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpgt0j7j7o/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wswitch-default` -> 0 - Compiler for C supports arguments -Wswitch-default: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpuy8j9o8g - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpuy8j9o8g/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpuy8j9o8g/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wmissing-field-initializers -Wno-missing-field-initializers` -> 0 - Compiler for C supports arguments -Wno-missing-field-initializers: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp206a43mw - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp206a43mw/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp206a43mw/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -Wunused-parameter -Wno-unused-parameter` -> 0 - Compiler for C supports arguments -Wno-unused-parameter: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp98e0ru46 - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp98e0ru46/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmp98e0ru46/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -fno-strict-aliasing` -> 0 - Compiler for C supports arguments -fno-strict-aliasing: YES - Running compile: - Working directory: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpz771h1xa - Code: - extern int i; - int i; - - ----------- - Command line: `cc /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpz771h1xa/testfile.c -o /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/tmpz771h1xa/output.obj -c -D_FILE_OFFSET_BITS=64 -O0 -U_FORTIFY_SOURCE -fvisibility=hidden` -> 0 - Compiler for C supports arguments -fvisibility=hidden: YES - Pkg-config binary missing from cross or native file, or env var undefined. - Trying a default Pkg-config fallback at pkg-config - Found pkg-config: YES (/usr/bin/pkg-config) 1.8.1 - Determining dependency 'cairo' with pkg-config executable '/usr/bin/pkg-config' - env[PKG_CONFIG_PATH]: - env[PKG_CONFIG]: /usr/bin/pkg-config - ----------- - Called: `/usr/bin/pkg-config --modversion cairo` -> 1 - stderr: - Package cairo was not found in the pkg-config search path. - Perhaps you should add the directory containing `cairo.pc' - to the PKG_CONFIG_PATH environment variable - Package 'cairo', required by 'virtual:world', not found - ----------- - CMake binary for host machine is not cached - CMake binary missing from cross or native file, or env var undefined. - Trying a default CMake fallback at cmake - Found CMake: /usr/local/bin/cmake (3.31.6) - Extracting basic cmake information - CMake Toolchain: Calling CMake once to generate the compiler state - Calling CMake (['/usr/local/bin/cmake']) in /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/__CMake_compiler_info__ with: - - "--trace-expand" - - "--trace-format=json-v1" - - "--no-warn-unused-cli" - - "--trace-redirect=cmake_trace.txt" - - "-G" - - "Ninja" - - "-DCMAKE_TOOLCHAIN_FILE=/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/__CMake_compiler_info__/CMakeMesonTempToolchainFile.cmake" - - "." - CMake trace warning: add_executable() non imported executables are not supported - CMake TRACE: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/__CMake_compiler_info__/CMakeFiles/CMakeScratch/TryCompile-5br5r6/CMakeLists.txt:22 add_executable(['cmTC_68a78']) - CMake trace warning: target_link_libraries() TARGET cmTC_68a78 not found - CMake TRACE: /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/__CMake_compiler_info__/CMakeFiles/CMakeScratch/TryCompile-5br5r6/CMakeLists.txt:28 target_link_libraries(['cmTC_68a78', '']) - !meson_ci!/ci_include "/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/cmake_cairo/CMakeMesonToolchainFile.cmake" - Try CMake generator: auto - !meson_ci!/ci_include "/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/cmake_cairo/CMakeLists.txt" - Calling CMake (['/usr/local/bin/cmake']) in /tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/cmake_cairo with: - - "--trace-expand" - - "--trace-format=json-v1" - - "--no-warn-unused-cli" - - "--trace-redirect=cmake_trace.txt" - - "-DCMAKE_TOOLCHAIN_FILE=/tmp/pip-install-zbza_hym/pycairo_ded28bf9d04b454bae7dcc031f1c1667/.mesonpy-cdely51b/meson-private/cmake_cairo/CMakeMesonToolchainFile.cmake" - - "." - -- Module search paths: ['/', '/opt', '/usr', '/usr/local'] - -- CMake root: /usr/local/share/cmake-3.31 - -- CMake architectures: ['x86_64-linux-gnu'] - -- CMake lib search paths: ['lib', 'lib32', 'lib64', 'libx32', 'share', '', 'lib/x86_64-linux-gnu'] - Preliminary CMake check failed. Aborting. - Run-time dependency cairo found: NO (tried pkg-config and cmake) - - ../cairo/meson.build:31:12: ERROR: Dependency "cairo" not found (tried pkg-config and cmake) - - ::endgroup:: - - [end of output] - - note: This error originates from a subprocess, and is likely not a problem with pip. -error: metadata-generation-failed - -× Encountered error while generating package metadata. -╰─> See above for output. - -note: This is an issue with the package mentioned above, not pip. -hint: See above for details. diff --git a/filer/locale/ar/LC_MESSAGES/django.mo b/filer/locale/ar/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..ec06f66ea7a49b0588c034e22c86c99f699e3568 GIT binary patch literal 520 zcmYjMO-}+b5Y^~ukDfiuL5)Vswjc_{`UxZ?5{W_YWw$IPrQLLk!5`w^@+bIPoJs;t z^3vD5d2eQZ4)(uxuyzrLh$F-v;sOz?h4@CXjc@GP)X2NJ$^seWXx9$k=g6Mla-5eduT)T^SUII%Rc2uL)}aYw{*Nr&!6etO6N( zX)7ax^Bf**p^SsBwi<4x+De1Nl$n?JGZz+8n_A`;x9GFQQWlDgm0Y09%Zbk5bQVI% z(^QsaEyPegRjX)7bN!)Ry55{jDeZbgY?O8FzjvbWi^^SIUAJ4RXK#_DBJ-BRE1zj*_zgo)+0S;l-`O4oSdxrjbPEy*lLXZ6WeVRFHvlElAT|mM3Z>{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..24974f0a5bf82ffb4ee81e7ed8ca9b169887934d GIT binary patch literal 440 zcmYL^!A=4(5Qa5++M{O=W8wj#rMnm+7S|{O35i5PR_|rETS~fZ(-wjk-@@1PS!^YN zKl#!&o&TSi-;48~lc3YUW#Bq+7Pt*W^#kAG^C6tE=AgONYgT$RtEGog@zmMP@xGV^LMmhTM-RtL_H(WO|vda?@@LKS&#J6n=~kSqt2tk zQspG|+7ftCoJkEMp#(hELQxr-F}XI+EA1O9WT({4Q}8Lip`4+D(T2cqBRRE#Drl{| zHw0s9OvlGuQL|n2;7V+T#{1z>9f!v;JEq_z$L&KVfhA97)7kjAa@I+cSFJo#VcIVf z*70oTv5{1$0hB9h9rO7|F+u%fUF=>ni^i(dl~9~Oe<^%2mm5nZnrPcN0?Pb9UEUqQ P{+hQGT;-6p2g%7Fj4gws literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..abddc619575884a06874ee0593f2be31f0a95d9d GIT binary patch literal 16627 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c73f2c7d9f66a1ae47f96ccc6cb4f2b9aa7cfdb9 GIT binary patch literal 16442 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

p3LqnJa^~1r{0fEc-kAS4^dI=g{f$?x;YbFRyEY zoag20Y}4(ohf}UN$zgV)#B142r+Gh|%vib1SlG6MmSR^&)!9Z23A{b|p2FvpluZp$ ziTG~`_3K2_H6lcFKX==6=7PCnD$SI!Pcm@qgzl<3W4likajQqECemX~S=1O-T{kVBNWq>rxDiBnBaJ3JX*|0sZE6Oje5he(cTibF zqRGW@RqfftcD#HcMo}h6XiOjGzxQ(fKSVyK6`y71OA#w-Agd72HGvl!+=ra1WPhX? z8so;DC>b?#?xXOe@I^M?wyGQLMT)#!wjHh7OK)a)r(W}&M@+0j0Ab5+=qClRvS zI%!R+jE^0t(OF{yH!gdZqrxX7dALSRr literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0f9415701524ef6334539b54b4f404bfae420c68 GIT binary patch literal 21636 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 gr)x-$-N+Gk?Ik`%, 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 11a1682b6234eda7558e71b08dc2e644d7167e7e..4f8792c0612b0ca8ac1345f94ed252f54afddbad 100644 GIT binary patch literal 15724 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 J`(XDc{{bkXdFucG 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 0000000000000000000000000000000000000000..f11285aee5c1ce06cf160d9784a5ba98c27c6add GIT binary patch literal 20427 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ϝ(g`JOBYYt|bE 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, 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 982b54f44df7a47882b40525cabfad812d0d56e1..6f688e0c099224139a935521e87e2e96d92f75de 100644 GIT binary patch literal 5456 zcmZ{mYm8l06~{NWii}02f{23b(&xb3d9*yrlv?_j(lVWPXr~1fTld_v=iW2-+;gty zG3_X*2~neg7$PJ@iN=UAAs9Xo_+n#BhQyG7UkD@yLe%&OF%W_YejpNm|8vefYT@Lr z^V_ep_S$Q$z4v{6?dnGiPlQ~F+`GycHN5sQUOdAW8FLLBft%nIybyj9UIOoj7sE%O zKKUj51bhO16g~?-1hH@C)#5xB;%|Gv*370{NM7Ueb30 zGQ`Y4&C`SWehzB>`=Ipx0Dc5M1o@eVd3_fC9BRGKLXCR~%AQx@$Kjvr`WrRhg8a?5L3)kQ2Kuh<>%+1^t}Kz{*}7^DwKVHhqCKmQ0sUH zu7#^HM*Wx9yb5aEdMH0#Tet71+jm3Fe*kKpshW2~jXw#M2MN?X--FWsD3rZFgZl2* zP~)D2ipv6&A6|#j^Cr}|_aQ&CicZaY3DkP8g6iK0rTNVl8{r?I^t=gW$GfofJ4qs50%iZzb^Us%@q3`=8HbAFWZmC^ z(m!AGJ5cNRKGZq%V<`VT1vTIEQ0sdIDlY%5+y4Wle>FzyytxR39vKC73RZ#Zy zLw&!s?%xBYcLK5`a}sKN56ZrKYu;b;hfw}{2x|OKp}zkO)V#lgvgbJ{J<45eoPY8~6^_FJIr*$w62aj1PW1Ev2ysP7(x z()%!!zQ-U_n_ocX%QH~xcnNCWzd?QXE>t}J3zhFzTvpA$rRE5f-J?+R-3r-WrituD zlvAe=J-1abmqU%!b3+9)3KefX*CX1Si_akn1IPhHw&)o_%%MBRlEh!eXOU2C>ORN$_?d#Lv|tSkXsQwhdByh3k+F$UVqi$Ok>Q)2O^O8@Du*BF=rV=e8tK;L{Ii%FON{ zu(3ZaX4a`__gABLr{2ydh0Ti8?=pMaE^c{{B$>DSHRs;QyR>@S%tyYNhe=F5>`f;w z4Ja|x>`i*}W^d|U?gO)rVY#nSTF#_#FqEWrrkpif?5h;|;6nx_r{gGbf!(}uOPKra zsmM+Hs6X3m_7%M-Y%*D9#=5_8oc&YP1nB_@2Zw@3~Zzhr;oC#U~L^9{iVMo*9Wk(-QtSfz2 zd(j7j=5R7#bJy{<>q|4tk<&3IPr8=38@I$oce;#yGE>z~_2|g@vq3ZI({7k$L?Sas zeV6&F1X(Osu|4Wz8Bw8fF_qFc#~daeBeKmlP*kmpBBsfc+(oC#yz9>vyYhBeXW%h8 zc51%o&GDW>Q^Pi0+(b>VZm}UNnoXZ&>&%G|A0)BOh@iRKX9M=&ruExy-q9^n&bXi( z#A$g+gpm( z`7Ih-u*g=L6g|`SVXK|jusEg{p7GJ33A=Jm`OZwY&NG=?1~~R-C?#ctm$J*S+X5D& z-Oav}fo-39n!{EYyQpj`KWCSbbiLHig-MZ_tnEgOQhkNPGV8U?XeJR9AMNKdW18(S z3fK}Wx{^53NU}F}VPuoag}IW3ZL9q}Lp#o_YV3X%QuMN>B8H#J7K*^wJYZy3IAn5XZM%ksul>f$VN?CMc_d%|&OPlREbbO!in>sH3Z zt%6uIro8Kp+A+3&95QH2JI{NgLqo3D8_cC5obhJ{n@M*l2yyFBWoJWSNQa_Y$&k;7 z`j=FWTA%k#9Gn9``x&u?+&5ZlHU&yU}xRX9ADPc zFAXb|=0%l}A295Y^U8AfAvaLRxgZRdjkVFTb^GyK$Qf6ptbf1aZpKSLm2YRmPQq1G zRk$+3m{!M$3MsGl0SFPx~OOscq1qx&k-VrdRB((!3AOn zg(*LzkeRuK$D>(C`kp2JPHB_z_rkAiD3@VMf0iMtGrJ0xsRCN1s%2hcU$qh5vZl3r zrSv$~5}94mWg7amVr3X~yEW%ib{pOd;Qg>4=s z)tRAw?&T1NM=b(ejxTj3RWjpr z)`PG+3rpLp#ioslmG%!~$Il~U9 zBQL!)F+Ei`BsDSDO2M_bBtI_`s6!*8Wb%DJR+;kha=j9efthKk6?)0}x%ve~`B|yS bCB^y$lYjHcOjhBK;)WSwrI0$ghF=c=%Xvs< 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 0000000000000000000000000000000000000000..0c1dfafb69c392d5872efea85a89c95bca4fca89 GIT binary patch literal 11064 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, 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 0000000000000000000000000000000000000000..aed0b0b267f59ef030245e5a122d304da5a31add GIT binary patch literal 21668 zcmchd3z(f%dG8mBVgo9mqPD0Xk-!8plLV!}0CG!!2!Rj+XhHFty}y~+WY6Bi-g}aa znA+gvA`P|PsEVyh)gggoNC;rSQtR=0&S^bf&eOfaQ=gtw`_yWCdU|>2#iz&f`@d^_ z-~RSxa#7p;%$omqS?gWzeZ6b#{ryvq|ES~hZQALy&%W5X*B$txT6dxsU2z)Onx_iNwgZ~FS7yN(Va_}5F zzX-eoJRTeYUki?bns*DR`92H&3it?kCir#mF7R)_S@5>goP#CzQ*aUZidQ@LYv4to z^z;!>be{p2f&UYfJTHEYa|^&lpypo&YW(@&FM+p%;x7rf9uz-!gVN(BQ1oWN3&1Bp zjsIKl1n?D1D*1l}d;xensQKOrz7Z^esKVV3^5-7nA0oIfg0la2!Iy#m7Zkmpg5vXp zUv}=#z>~n;;E%vFz>lIN;ZvaaY6V;XvD>)67?eC82BqJRgBO8c1m!Q!gYt(LVoc3* z3dof1G*JDQff0Cfc;5ge&on6g&wwX`9|JYdE>Qf;fzsEvLCO1Ppy>ZYc>d3z&5Kc_ z-%~*G^O|tK2-N!}p!72gVnTOQcwYj=$0Ud<+&$n@@BvW#d<~TU{V6Cu{|eOnKMC*U z%;#`_3V0)U3HWAkC-|%2AA#qC{{r3s4n6x9lr+3kA4{Na)f>>_a6hV z1OEb)pDcxG`R!UzaTJ3u0@s7$^KMXlZvvH<-XHKo;r)Z4?EMg^@sEL`_cSPZz6mY> zTLFInivPb0_x}Wn{!c;mKN;oeeFUBeE&?_0a_|Ij7}Pvhg6emDxW5S$-?xK=l8Zs{ zzZsN%W!8N9K=JW?P<;I;JpTt! z^Zhd@J^nlRzT>dXInHtEK6tLjXF$cpUxKp#o0oV$ybV;G7C~Isy$2K@p9Yl&=D@!I zzXB49?%_e_-Ufahd@mRcvF3rF23LX0mwNj5fU^JZfvC*w0+)l|0mawx%Y2?10`K7d zM(}sRM?q4Ydn=t+gJa;W;1i(qc+z=Zudf0T(VY%n4qg+U?+DL75S~8`-p~7=fZqk* z|0eGb?;wa3$CLcq4}K23349w#ME2bcO1^J^Zw0RK2a3P@z~$g4!PkR-0*cSS z1xW?&c~JCTf4TRgb3xtT0KOc&J>Ys!^zH%Q0NxM28r%b(34Rrnd_Mvgfp5IR+h-Lh z{?~!h-#B;;xDz}b{2nO2{vJFFJo!pL{{^7vuK-b{y8|2n9{~At|H{8>!Anr0?ze)Y z;5R_|&(alMAMXa`*Ixo>z?Y$<+rSTluL6GzehfSgC4Lh81o$`L1u!W-&tww$Z5ezU z_!&^+{|%(8Tf54~`NzRc-2V{N{4xI)f{%hHgWm!p@XtZ{`*Aq4?Dqyxbk~5Vg1bQF zr!RshAIJI(%3ptYz0XI_gW~%I2qph`4R`^#4tzJb6PyN5xWVgV3s~a*hu~sx?TudF z?*U)Q{ez(F^B5@q`wF-O{4OYaxi#KSXM!*0_6kt*Ukkn*d?)xCumZ|2wu7QK3!Vl( z18UrNK-s$m%0He5CFkikdHF5?HUG+h>%fxcJ-r${3A_!0s{uC!+yWj?zxzP(^#Sl4a2AxFz5@<`e+@1LPhIEdxf0a-Rp6=MyFl?< z5AS~+RQzlOaTlWGRvPuhV3UU!&>sWe+X^AEK?Iy_0s3*8PzTlQhK)snBxfBcML= z7k#dz-Aa2G?G)O_X`5-YG|Xdp^bYV3Xb;mAzqq}96Ep9f32X6;oOPip*i1r?u z{Ck}CC$x9a6c>-u($5MmE~1@~J_z_U_yyXp(&oamEdi?m1>dGU5bj?BzAaoY1y82U z(2BHsY5$d`&nIZt(dxS4Q==VEdmXJz%YO#A`6}%dwBMyYOS_S#&tzC=@Q)8{r1mh*OUeG~0#wEsf; z2u+{6Xa&3SYsw{DFQA=4dmrrznm*5Xa0deZ7Wf2h8ErZ3O|)O8HE8MQD_ne*Hbnb% zT11;vE~+CJL5X{XUXL_3F;er`@L0zL?CrM)-Y z{~`FtwEJkEr#(sgH0?23{__HEUP;?d`yJXhX;;zoxrg>)T`U?XRHrJ9q_(&ojh4zu z&x3mBlWMt`)cQP9w??%Qm+v%sP^%~9q|iu;?uv3bn)l_hs5;8qLZ#6$q|hi;EAEP7 zF)ECg%Eek@H}xovD#^y^YR|h6kK5=~d9qWV<0*cewDQKK3a;ir*A zjqxO7%_N3srMR?Oi$;xV{jx|5!eS?th{+cw8=P_#y*6Brt;CG~O16E$knQ9KrxDq$q^!FCBF zo0LnUHA!uvRIj7vXhl*fC2cZ(Qm9msGgXUmz>`#s@|AAQX{u_aREW#bRIMDHy=XwH zxw9OPB<02Rv)xtWab+wC(DNF~jkr{<&->nU-rcP*Rl_?_jmg#hw&!V5SdYP^ymDzm z7v>IetuU@J7O;V|;32qynE&by7Ym+c7!0jgE zu>`%9Vb)z$ot(CReVyCCN!_Y{mlYN$&corlWbS#GPF`niPwv|_+E|?`7t!F|Qzdj` zk(v&~f*}GYYt@Ejlq~XsDuz9;>4?KhmrYflDmS81r9D|1&VlHXXk@CPOj3*Dg5|WR zSWW7R!trH&&ExdIHz2s8uI}UCp-{>(fmVExg52l<`wvD3vyd0~=tf6>0I} zGa2@1RM7}`WRV6wy|P$pxRn(X{RsT6OcSV+@HP8icUSwR!b7yG!0h3=5LcAXa#_w7mZOd1NyQH!vx-{3ah|GjuWU)c){?k5?NdrUrJi!Cg#;$l zvmPx{c;|XYahkCF(u&(<{^YKy@)wQ7WSB<&QugZbrL#k>%yl>W;OLW+`G;|Ff&dw> zP9#b&`8TyHvU;NV$4XD+zjiuy*Jyzoj_$FAZnL`<569Epwa|2{CZH-$n?Nink2t7~ zRY;;mWz~|sww#)5DkMp<9#Xay3={FDJ10wO@U*JmrIhv9MsD{jD$(8R;4gRn9!p> zWmQmAt`eToxbHg@xm6@n9|A-U8lVDUIb|&hi9wMa)#d-eZTb$FsFGPN-B>E<8lW<3 zVu~6nAG3I9wMI><`N$Arh&(6eNWBE-crq~*-B1lxnx*cMgs3f8F;X0I*Q*Zj{|{dc zT%QUZYQqVtE6Pl-k?^cuNJyy^sB-GzXyK+M(@<*w7y-W`*LY=q#D%4BVM0G7)U9^ z-MFzr4qc-NT{KXk=CK`ug&uczTE!vHSd%S-_55{I^y^j8ttHvNXlIzQO8#0Ft7SsB~Z=QTX*w# zbtC%I!n&c9Yz+5Vspy|crklG0sON#As5;fCmx{JckZ6{E2(g=|Z22CYDzlUmTGZ@F z;G1bj|OxV-E*Cz2v+3US>Wb<>sl;(bA@@b@&)w5~^&UeY^Z9B_F6jJkHl1sgn)Vw1umLLYysfqn1$mH)>Ob z2HWw)!|oX7@&@|FPL;}$+H!#Sn)b@8H{xmS2Y3SGK5G1Ke|?fnvc{CgsNBn$R@t>z zh(q$+WI3KjAwK3oGC==9dD32$UHyWH9XxnB)vl-qg5(z+s8)13-G`} z{HfrxLF#nvZfx-zL(%GZn*1?Zs!jK(^5iD`{wQzLs&i0w3u`^q%`>V;Y@}1Ft#%q zBjk5}&Vv>W+ujX1Gn@Zkcclus0R>M~i=|Q3YUsmuFL8NeJYA3MR7R(@W}yhJ$sGN9 zC`MR*#v4urfvZSyX;4QJ+a8k~sn|)OY`@)PE!j}2PSu@u>aIQ>FL&uqCG{R><*Uv( ztn!eU*;#x0l@>XAcBbr}2X&`Y6X&yp7j;^382WA(vx)!}Htni~h#BAx~euE4p5qw|(6 zKW}i^1%u1q6fHl0`21z(F5|P{dd}Mi*VW=morC%+3Hj={hKVZCHRCbLjxHJX_hWW@ z`4}6z@=&2V@s=ebcoE|(V^d`5!F5SIF{~5wdWq2k{Pa2orvhM1^3)}rP`)E=dTv;jLWm;A)94R#xtSL{`;_{$&q4nXYGHJKDoFKDVTS&ArXp z=EG6*Ky!|Pt?jL?t?iWjNA9`|0?qw&^%T=kw=w9@-VP0>@GF(dHbZ=UnSq;6QU9!*;j1%=)#qH)mb*Ax#vuwl<%leO{An zZ$94KEdtS@T}aj1`rOW_xfd2@Tifk%s#tP190TWI_TJV^Bt;tQnCQ?hIN8S>`+Oy_kUhA?8Bas`;=we^B$tB3zF2(Lok$07OW-a6s1vXUROfU=A))9nG_-50+VtHSIC2&2$tT1 zeAs^axt$WowJ#MM`cYV^1Fot!K?7SQe7_p?C32_kO6%wqLV~7^KaJnWGL9Da~0@SXQ6vvT>6^9El{#w5pqVb5YW>11u5QE z*^bQbmj?zwgaq%$ABD2#<;MI4yDPT(vXd@4emOjV&&?@6%I}GfJuu=60=ws*QWohp zm5iX1mmW-4Hm;S7+g@jpktH~V1Ov2q5R3OVpJ>kUNJRkxD=Xtw&3(knZhBe9O_N90 z_ha7QeKKfmX9#)45c~+x;qTDkQmB zY+5n1!<2>?s0bpkj}*MNMI}@gT3Q}v5bLJ$cE_A_welxu6**9OHf_p?9{0DelfsbN zFSHk{A!<}3#^O=`rSTcO_88Rx9A zsSrVlng3e#g{XL4wrFK9se61p$&HndMWKv93rg&sk%Bcw}m3b)^=OJ zh(~nKd<2d{ZeAkh$8tl0m?@cHF5_>W8PbR}7QGczxY;rxZ@|Ij-puOj6?vUBovQ@B zRZ>E_Q;CuaZKM{}6(H2UA?~}GY1eZ7=aUv4EK;uuV9YP;Ow!uk`=l*&&sXbxIvZUR zSqcu3rwXfkqFni!R%m1#?MsLa?Q41lWC_oDXg_wCKCK<-Y6d}(%?k7O*YcRu09d=)WiJdpA)WiMM1QO|X^=~s(jnsJ$64@Gq-jy2&cOJK z20FgQmm4Zy2ftSh(tO-JgH1OFOO{`} zJgFISd84!V3zOu;_6bHZS?s~)rm0}I!`ZO!$<8qkklOP4 z_0{}g$n+oJ!w};rsXi-n>KwoaN4uUN8Hcm4V7tsqx~VeKZ!6G}5(5i`bg0Ct6DD&Q zm2=D@_GMPQ{Ln6!oy+8YN&*e703AOjVSw!cT2_eVZlbRGHdTl(gjsKxE$kc8n9A-$ z<={FT5yrOmKIsg|{ChJ8QYq=r_dH^TC+KKL1V`0r9xG!Jv?=Y|v1b2X+2KZTi*UT! zA_s}Zy!-fPD7)jV^=SHZDkM6bcc;g@mXfk@c$>TcH#tCN^_O<~5Jse(To4LI@ z;y{A52+@8^XC-38m%^mlJyyiqcLF;Ov9NmYhL*U_+*sNY=RQYkEz@Kjzawfh!KA1W zQO!(Ulv=j&$~(1s&NiQ9!Y#VY9ZIBL)^AP7A3gL&S(qh!mtl<9S!5Pw*wv19GDgC* zUWrT`4VbR>VjrSj8sA51(g|(uYY+7E1r)4@wio6%I+@DE!q3B4-t+!Lm=o9GFt6=q z!SHQ&?K8D)kvlii+4%{6qO|6fqC6d31%K=DsjR-*)2&C_V_~4DvO(?i-)0Rf$zgKL zhXV+F6H6$vm_MAf_ed(%jFxRM6c>zN+ck^ZC#{^>A-A`fnfJu7L_L7AI& ze^uuf=ClG2IX>GJ{K5#^7WrZQ_op34%dmt?nagX~NAnTclkUCd=ONUs{dv@=ykqH% za`5QBKcP2acTC@muIjeRhfrMLS9ocxCQqWbHEqr38x& zoP{l=oZEcZS$fT#VD>!7GI4sw*F8dCUp}p*4#6|}49^uDkbosZMSFZZ_dNq~C7~?t zPb|{29a!|~t$j+^qB5lGtU?d#q$h>*oDH@KXTM`(_yG;~@n#OmssuZ1;I`W$11rNF zRd5J2^WrSkwBx?pnZgp6=4HisHgMMmJq=_MyuHu(isR-%)=38^Xu#N@o#3++UhSfuyq2uQb z`AA7c(gvyjH!wjZSyGedAkI;)komdf6^xYINqNS!u{__@U1{$>bLO^N!l@NeeZ*E) z{P_fIPh*6n5-nswQsrNshqdo$W@_zFA*e09Y8jkp-d_r4yKtuT@k96a@p8&RIJ$wO z=B%SD!Rya*#i};iq!#h_xD3ixvnS8!B+-6xgQ~LfP+q6Q2aD2NQZh-+Y5lJ-`t-r6 z{o-x}EM2;0`eO#=DKVrl4avWK)R7)TDU3VLK(ZGtpHaHscipQOsz7KdgBm@!H93%Y zM%)7`T6{q6^*?;E-w%b3NX^=^P5WMGq$?te9Rv?(VUWh2bnN!+8&7)nyy8d&A?Ri& z9n#;E4Bo?>d@s>9b55ws9c zvb6Gv*k;Ub`9XTnLU-GzA_aWvTZ#0EreJvXJYB6^$P7k1`x$}vH-$zz>7yvyv>X8> zb3{TV{_DYm9XDFyNcl=LEZ5m-JV#bpfn%5G#5_=GnLH(OkJ#9t=, 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 0000000000000000000000000000000000000000..984dc53b70094ec1014d135eb418f18b5af8d8f2 GIT binary patch literal 16713 zcmcJV36v#OdB-oxh>pmnh-_L649q|;Gs9}LJIpWxGt4*}qQtTKy_$K|?{(F)mTsPe zsL_bv7R7}{gG(DwF+>cgh*8su#s!a3KL!s1{}trV{DPmSgHJ!gm^XrlgU(A8*nwa@;Syl1AG~%dJ%Xa*aVLT+o1Tl z5fuL)2gT35;IZHX;7Q>3!71=J;2mHCrWnE;_FQ9@gC~J61up}||A#@z;TxdFc?4Vq z{u0!@R~}`|Qg8z(zPE$wrv{4O8$j`U6DWRe0X6UUgQ|BID1ILXC5OKQp8_89JlF5> z;E6o10Abl|0>wuN!h*RL)Ox=IR6lovlFO&S6Tk;NJ_3qwH5RT0uLLJS@pnHc`F#O= zA^0Ou{2qUdTkn%V>A@OM{htd;t`~t+HCKabKLZBfEuiY%4@y3t2PNmPfro*QfExE_ zp!j?Y)clU3Q^{up)blyuMc`&%{#MZHA1MCr1f}A4`{xJz`*~3E`8J41%}+q_BVnoC z5|AOy!QeP}3Mjs=1XZu$pQpi7dHw@%3-}T64DeUrS>PDTEjx<9E5O@8$@fuE>w7Fp zax!=^sP+x;T=3JN`2J6@2_AsaNH3?s8^P~`YF`VS9oztF+s+jvh>C4}HJOib? zjORClmxJE}d1X#K$(TdH^`P{BC#ZGa4L%i&K=BcS;;RixuU_l%M*sdM(5|z`J3;k# zAE^Gn0E+K#flI+3czhH*kmtwz^M8XHX9>bo{pW&ue=;aNI}OzMXM?hzi$IOD0aU$h z{`pF93C|&jDw(~Y=J7gEa=H=3<(c<_OTfE5-U~_(KMSh1fU_fqis1JD&v`u78rlUuWNrPI$f zp!`4#iqGpn>D?QA`Awkg{tobZ@BvWcUqWXi;5Jb5c{QkUKLEnAxx?c_ASPuV0~K$c zbDE1cr-GXQRp6!I6!;AA9#Hdr09*||1j4c%Onj|mP>pjI_%!f55YsekLCve?-@nPf zf4hHwvw#0-u%zBUf*%8Sjk@_hWz5OvQ1EKXCqVgy_ki-J-vPBwKLyu<2aY@a+5l=E zF9RjV7I+T$8t`E7Gobi=5EQ@P01pAb1D*u_5IhJxXqEFThk|-O7gWD%!2sL=s$B_6 zPhJmdyxT$X_eoIe_f1gkzYFqb9^q#>cqqb@Upx~$9c+Tz!P`OU&3}NB<1ay$$~D3ŝ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 Yt~rT`-DY@Qn3KV=ON~0YhryNmKY;j@A^-pY literal 0 HcmV?d00001 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 6028106124c2a1411a9ace12210c8e01be849c3a..9936407bf826a204d11fe1b7e8854ffd290853c3 100644 GIT binary patch literal 22139 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 YzHpFcK^iak^IU30u?vkf&c&j 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 0000000000000000000000000000000000000000..888daadd0596b0d71d05004539e98552863b1cfe GIT binary patch literal 3830 zcmbW3O^h5z6~_w_6S5fc!G|GWC?_QBV$aU5!^UPdn_#bPVu9n8W4v!LJMbRFie~iBWok~3c|8ol;w8!=-wFJ+?55jN3cf%|2z3|8I zUifqP5%~M|`Azsyp7*~?DgM+fAGg6SJOqzHS^qUC??2DOYj5mcTo1Z3O@wj zf(vjT#%_lXL2>nSkSTQv-U+_|#m`GEEtK^+d>`C^cfjw!8Tf;iKY_RM{EPPaS5WM| z3}yXm@ICN#DE9saW&OX}=WCGA)h%o;{@f1lf_K8Z;k{7ims&1EiR%QE^IU&`)ok5_f05vzSoXlf%owI43zkO4aM(Q+xb62vGW&*i|ViK_*+oy{1f)yq0}`f zwQz}~h`k>{hSZBt?7jj&4PS!?;Wc;|9>BOfuR^hJpuFdx)K7p?Uq6NN{%_$C_%{4F zJh;E9uZN+my8vaKhs*F8DEa#n#7*@k6u|z2xY&OcKjri^M4EyiaOuUUxMPdf#S#IcKq8=?0grBpFe|gUtVtK{{U;hp!j>W z0(droa{eo;=@DqqxAdfN9doVOOtyd zvCY#zMVIpyZIJjUO=?8y^*;Jxx}1SDsYPj06XJJ|F8Pt#kS2FW+5%nj^Dv#1*G6=b2Xg^>!+3`xcZt_Il4OVaZO2;bLN7bsyb6@Hd%ca!=m)WRI zo_2lE1D~ZfM78RR%{^u&PVK(r)EZ0jqWblHG?y}Wx zY=$;Yo~E0(!%tL6Vq+XsS+=RiIG)Ox)CZZisk(mmd1W|LSK4t@4NC zLeeoN6Q=ZGQv;($)(uCcsuSFNMm6@S8@MJEDI4X38@k+Nb&i{nr*j)r9GOK`j$Ev> zAvIoaF-`3Dl+UwGR#xMFZd|5)6Kc6xSXC97H)*q5Rm8*)bQQ7wv`fp8S_}RuE@5s_jB_{J>MMZWlS~KqH&vTa& zNBPW-%ChKnyQV1SOL^A~?8bcJ$KBMeJKt>_?8pIzZq^#<4zupu)MQT&vzc>e&z;^5 zYjJ*IX4U7V&GCrT^y*^i7MXGRGUaMQwB^c|E}rQe-(DxX4{Ye1&J&I;ANKU|zAIbGl#wrIUNO zt&P*E6X@e*tfj>xvok; zWY!~6W3%;3VnZSjf(-$!lKTb+<$?kbW&5lcz5(mXxdosO5D3e$4t znU$9)H!CvjgOb|NHXoYQ@w4f&jJakEr8ez6*NeevCe*}?PH)K2bet62IC1^UBH&DW zMGRsyh=dy@g3Yg3R@#sol2;obl>;L6DznI`oW^vd(enBnR2`pc!&lQhW3DOo$rQgH zZTU5VE@v^h0;(Ot_w6wXvygi=3{~NAG1t>nin^22KAJ6p=Exh)dlB~y+k8$WK562W zf>w1^6MpNN=FJV!d{yvc=D3PjY6Ra#4tJVqe&Z&G*q&0{dO_c?M){&CO9B|X+?f(> dQl-Q5SoOI<+9)$FGO7{fuj-xnziQ;we*ur<)HMJA literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f1dc779e008cd6f070e6a35a9596e6298ed45a02 GIT binary patch literal 14347 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\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 0000000000000000000000000000000000000000..8a2e68474613297f6ccfcecc9525d28fd93f6278 GIT binary patch literal 13374 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 G;C}&iG=G8s literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..4f949fb53aeaf722154e4ff2f687e075892f2ee9 GIT binary patch literal 16819 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 C$D#QE literal 0 HcmV?d00001 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 28289619f9af249a40114749b3f52e957155becb..b15a9a6329d8c6f89095de215f6d232870d95551 100644 GIT binary patch literal 17229 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 literal 16237 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 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 0000000000000000000000000000000000000000..f18d8161caf5db9f64f3f2ed44bd785e577614ca GIT binary patch literal 432 zcmYL^&rSj{5XLcj+M{O=J$TS)=`MzdMT~!d1S64<)%&q5MR${v6TeA zERo#Ko literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c1581e2b203a7c6d65e5f68eac52b14ed7067ae9 GIT binary patch literal 446 zcmYLEO-}+b6vXIhkDfjB-~pngyBH!CF@69EMB;|5UQOM7yL8iSo3;?V`xpFs{uWzE zV3J8++c)#x{GFfuwmeQeFFY?jPd%?a0|uTy{`1bCq33|qs2XyIX9fNMW4V$P6*ZHU zLQ^ilL`%@hIJ~eGFYxoavN%%|Md=$}!iEO{9y13N_2Q(5<6E5EprlXx@m1^*y)x@? zW|*{sIb|q%k`)Mr#$0lAUvkNW9|oe#hs-yo7C#l7erzBKr)u3>iom5zI)!JUI4+9ZE2GB6C%6Sy43j;x0\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 0000000000000000000000000000000000000000..de0708e706e860048164736266aa74b208f2d9a6 GIT binary patch literal 17336 zcmc(l3zS_|dB-!8gux5#{B+ZJvC;_p~ftOm%`&=0Z)Oq z!o%UWAVtiN;eqg9A^*&;`Ew9F=rChm2M>i$fNzJY?+*A(_*JO#55Z@_UqH2U=#z~( z8lDE#&JH*VoAB}QR(KY?9WH@ChEIe)g(tv2z%_8?Q;c~WyaFm;1Rnz%@aeD()t~F3 z`u}05{@e|Zf}erM!5_eB_y>49oT5`SVV?9DlpMYW)y{)(HT(_K zxK|!w%u;v(RKK@E)l-A&@9UxZdlOWDc0-N(Jy7{R1l8YfL&@Rq;QsK)r@4BMhR1S0 z1nIK57^)v3qzmRHQ1ks(sCxE5$>o#q82A~_2ci0{!r~fuIUI-T-@Q=syC0qoe+1Rv zqmOj+eH@e?oCsC_8BlUP8#yIaIzWf8T=7=Kf{y68HglGW;!k4je_fWk(U*3~z;!??X`YdlX7?JX{A=ehQue z?}6&~zrzOH52KM@w&3;f2T_s>FjL-2g4{+saKLjA z8FL8S0Hy!iq2~EYcmRx``Vm9*s|}@Buk^g$zrP9EdG@>ms=iM^)qg)!zyAgbg?fKHl%Aac)&8ka_H#B=I~PFZyUgET4wrBrLR862LXG3q zP;$B+;_}Qp;1amU^KK|T{4`YlZ$tIxZ~gm+{PUkf_2)mJc@J|3!utx zf~xmLQ0;f%68KuE@w^eL+%2BBLX~?DRJo5r>Hn9Y7%;(}b(xE%2RC ze(>Z~Zaf#jE4VM<5d0=o`QJiZheox5>iHm4|Gx{L2!9B1(dHLW^&NtfmfVhk8s9LK-fV@cKZnY9Eqph86MPa}g;G2j zo()z1HmH18!9!pU1NbVa{=65e-ETs*_fx3)e**)!->Ix=a2b3myaLL8GN}5lhPVLp zT6j79Fyx)-?M8St5F-8`QGpTPZk zcsRTi9ttPnQ(zaq9o`5f@0A!|0LS1Ccm>orJ_gT+2c2ci^WYXJz5f6V;J2XK`6ZNJ z(4hAR2SUkzDU`gQ3?+wWL*+jmO3%)Rn&(TQo<~sgokR8e<(@aggSo#G9tiJ&s{ekd z{9lFv{4P|vUqih=7~!bi!=c(c7V7y3l>I#is^4co)pL%&-wdU%+oAGb3ni!PJa2)L z|LsuaKMbD zy}!N;{)xZ-l;<{hmA`&9yoZE3nJ(#ClJx8%(hAbmq!*C%)BNjqH|Z;+>quvl-a*2= z?e9zc{k*@HJ?i&z2lH9@GEzZ0lJr7S`IF9mgS3S-;vb#}CrGa+NoQ^+J%{u*l5|?X z$C3V&6p-}0g7hNNF48%qFOZ%|x`p&s(i=$nwMmzf4k5jZG)wwANxwY~)!#F@nkHRB z`jCIR1ipfFE9u>&uaWwHFZMUj^W5(F>Ap;NaeXIgqknd}=l$?XQsVDF;VFEK^g4gP zzvm5}JK!?X@uXqWBuT&LleUsxL%N3aIg)bXOmi_&yf0m7jttKsX@AfbU5kbB>mQtHj(~}bRbE; zCh1_(g`~eG-9$Q!l#w=&^t+ApVNyt%BP}PHDMcBO3)<p>Fj6!Rd|Ww60@ zU|oGCOlqn;i-K<23G$A=*cm28P^3Yf=8GsOrlP7Rc7Rlr)K{fhFkx%T&kEE(I-#6A zYottDkd=`JZ z;AvEAFkDHq8Mky{g&AhGDLoskjGm-v9t9huME*KVg6QfvFC@@ns?!=z=yQ;^HMs#( zKvyCOHjl4~f_9jNEv78X$ISX>6lU(PpFOF=`esarrXpsV=Ce-1JKLFwvM#2lJ(Yzy zJs8OAbkX*|n%G*F=1dCH*bXNnB-xDH<7t@Hxndw@ecJBYKZ~l3dsFK8Ub1A7G{&53 zRncSdtS-yLYpScj$#Ne`9qddy%{r2OaVJJv))vZwJsodnX<<#Y(rquCvHwX^d8b(f zanft7G#Fp$a4_B}WUE;a)~u5V>S>fGD~ez$oMHZ>tQF_ERAbP5dmS#iZR`kJ?dzws zE3^vb)R(?9K2ueiM59&Jy%A9h)eUNkId>WhPlFu055jsYPRzOK&ZL=! z^#$f`&dt)c*Bq<=)Yie+WRT0Yw{002UcO91F0d6_zzSQ=N4@K~Y;jVg$cQ_9Pl4W_ z*J>Btpr`%kB~~u`=)77Rk=+_yWoCo(%MQWD8eQ<$JL3X(AxTQ|7#vnn?>fhjkNRAB zNn}iR<;;WSGS9x;L0GyVx3ZvW)$E(|Q~m|xAs(XWzmzNoW`2eDetp^P?4p+KcK<^= zC&5(OisT^r-()Gi-BsHEShIl_>p56+0SbsBnhU7JY)odtW-P0;f4! z{*G2T@{V17f@aDT$sk`$=P>r(E_a$dy`(| z80>-qTHacnywLJisVs(_W-R?`57khI(0+9egT!K|qSk1zIrXcfHR$muN`jhQ#_FTy zVyz(VuT@*`y4C%GMaf)T4%)BDt&p}$iTG!EEyB=(4PJ!Ht{(0#qlq+ablPT9RF6Y! ze>@8j{id`YPsDiPO$^%pu|B_6dV4PibVeEc-C&5|-c+J+f_ns6G`6xCvzbXTn|l!q zvU2jPWISp%r^7)JHll#}lO~%>b|%=?7Ss@L(TiIgSzv4b+d(47AI0m2?}b?w5%#J@#q${?&W=6X1FY>G|80L&JSE>b)1Jz z)un3OSbyOV#4Wq(`nyWFzK+!-Z&Bey`MLQwOaz-nc)#uuX z21f_$bFuBdDx6=)PkY~L=a!{;-I`a78Dx1QuIg!%+|m5O%qu0m*jNAlhygENUB7+J zYv1|U1wB}hOB&gq%c-BTO-#gB2l_V4e3c%XO=5!-hKUd1sW>WI}QYR?~6+ z#W21H8(y}2$QD_dx2>RnT(&M;ForEMBPWhpKj>oR`lJai9-w zoXWUx*XG{!?boVkp=P&$3B?H1&Gw{`5YP_BJ2InA6f~Gg3jBWpm@` zVZ*cXSy0o)ACGiQ`8Id1_87AxW_cwTQABMn4>RfZSg_G9H1lT=?HNHAYRq9$uN0=Y zuV)Kbj0T&+F19}rXGB9SnPKRHEf*5!2vSJ1X=3-Zr2d``jAkrGnUHuZ)K5Lg=;HnnBPBE2c24!P! zRws;&n{~!v9}r&__Ck9TU7(L1Os!5NbmtFuwqJI!=|zFnl?~K-FI?Q#yU$I{9Uidf z;WBNTI-4~c944k7O@!KPhomC9x~Lx1LVL8rebVJmUdv+tpbYu^YHp&LDC>@=^{$aW zvVSleVjke2SxR)+_loGOfie0n>+I%syLn(Y;`vnIW-CBunwrIO z$f>d_(2~|^lSpiMZVk5zzztzdT^sGLEXKaFfplrt_K_`)TO%%SXVFZYc5Fg1S4N*g$>R(#xVY4tiu$ zJ{i|X&go3%BiqukVCj}iMlM4JDll>`3OW{?xO&ZrBdbpxS#wgb=9IBhR-dq%-_ncO zpNwqF!X)PmHOxxb*adL)sv{@b%YqxLPFmhTipIV=YvXS$W z8p^7L=d|&-Sh}Uz$-?G{cB=VUkhJY>zV_rZ0(ZG~C<&GaYgPwq*9L2X2ONoVoV&m5->7HPm6t1jnqU!n1-C z$AXhqp0U*Qe-0S$HpBT3(!tLGWSP5bex7+xLgbb-!oh<6VLVXQJzTUn58GiLXK~Uf z!eIV(?@@oXI*8|PqZ#*EqF24y5yg$X#bCB%aea1I5pz`4nV!9l0Kd`6ICgNi93^Sc zJl{BXTe~^COXpPl4JJBCqZUsi#&rbTaU%<<0sn$;Z-;ZYaXyq#XVqYb5*P&_%w0ve z=_~H=*jy2yXK@TMNlUG;FQ;v1 z?yh<5Aoh#wN|xZR7X3_dQKU0g65-+sHb6+dw0Tfx8H;y5hal?U<#@Y;A|s90#*+M4vPkKZG`tMA(`&KQ=rsQ$CS} z*F>=^W?Qccmem#=eOU2IA_d_bkFvVz;E~%gt*an#t(0>p6;MwW(eS`Ek2&OQRpLh2B$^;! z&x*(qcbM?7orj&tRHL$XhwX8xZxIcijg<=X2-~Xar>#Y*(@CHvvSaO+JTq8CTBOr- zGl|%t#{ue4mv)u%Q$NY*I>bd0x99G%-D(i~kkP4nNLS~biO*0`qOvXr7y0aUnIjn06yRFT8z>a04U7&2>4XaNkr`aIvmjJlzGJByJSxBwtFy>K)p{u8>JVbTgqQ zvW3#1IML)ah^K?fjFy?>>O!TKOWM9jh=(66)SC%{L)|oDd~%fIIwJIt@>hHMuQda1kKn(!t?coTQ`urU0vpxuC`*8t=?#5o0;Sw*0poEN-1! zRMn7QksfAsoy1E>lpKHbOG*c;@ile(HOI@>f6m#MSP|NADX{gY)7H@Sfrk((80W)l z%qQ#yljr&-FW`k$UHFx*XOg?nX4dlr?~1#Tg8^t!S+aaIKji9Vs9aR9{KIATkx4Hz zGu`XXZaQDuAj(HLi847wU^tuk_*llh7--tS{Co^5#TpJKOY;j0=2IU?kg<)ox45;P z@2I^`M>Okhd*6<5dzDJMprBmQtd}$w+f@elR$i#@&ZWtH#Zz}jp~S1p#6tugP;%5i3W*Io@u)r#esr6t}9(0Mx%1ous?oG#=e zkm}3eCyuv!%e~a zx!cfC83vs=*Dgp~2TYdWt+v$2DisgSFz;`ukIT!_?5e{2V9?V=b8Vr6Tt7_Fw+HGXrCYv1(4fg2}1|{uucIE1w zyKA%;RybEU_Z|u|V95$#32Ma7+LokF;Dc;ckDV(OcR^;||`byR) z*apsC#}}i0HdHCYqt%Mt<@e3&&@@A36(Z(@yIa1NklTgL!y zB`C8?Z1z7k>ZoVHUcASrx@|F1VKpa2Oj60avRUogTp+2BcX4CxHqJQMr-mH%%-zR9 zW8VK6ZF7{(-Dx+g1vck)DT{(kW{L0qNg&dPn z$=l^t72as*c4J-* z-rrU8!Y-#bY*(-EukEu@SDco;TLn^Z!)s=ErU?+=i)iL*6S4teb}Q zx!j+zsh-_UljXTX?*k%7JlGlH?^hy5M_kT{pt0e(+oTb!;BuUBE7jK~d?1g}LD?ef r)n1;*hLb}EXjclmHfZ2l2mIn;`&HMOA==k-n1=shtci3On8yDG5srrl literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5e380751c44dd331e04a79b4e13b3f02c62d35b0 GIT binary patch literal 590 zcma)2%}yIJ7)*aod#rlwVUQ@wiaKitP!lH`N(+&Y5)q-L*UDs_jU&fic^yP0UW3=` zv(!##xb~Aq{%n6U;&wL zpV4C)Dw&AJlfntpXyL8nxG3>V4>9n7R&)!&xZuZ7Z`xm}L}&r};xNm59$ z=9nnI+z6wDL3`h)XfM65d6tQ~?)Ye;7V_AII>O7IVg%O5(-U_06hknU;v5wG i-w;MQx{>svG0gkve`&CwvE|?(4}$0Da-5`tr1cj;D58G= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cc24295a701c3595f1360c364c2091be6778dd1a GIT binary patch literal 12700 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, 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 0000000000000000000000000000000000000000..c9e62df2fddfbcac13f14e378f30af2c3995ea75 GIT binary patch literal 21260 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 C$(P*# literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..379659ff79358becabc7165995696314e4eb6640 GIT binary patch literal 12594 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 literal 0 HcmV?d00001 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 6307dfc78171a3cd3dd5f5cd0149437da1565211..99ec9f2ea6d640f9288703f648ff7152db8ab30f 100644 GIT binary patch literal 17155 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 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 0000000000000000000000000000000000000000..6a145895ce3b9d7cab453fcf43dcae737f5a9929 GIT binary patch literal 492 zcmYLF+e!m55LNVPAAR;=1eJ=WyW1kx)U{p=O$ zfxcAek`Y?t0vq^Bmh7&sJR2Jh$?%1Za4BO0dk_IRw6eU#vI~~CAwTEm*=a_RJPRM# z*a_{G2*z=^)fFlO4^m6Gno2Dc4MR1zH!~9!LaOG(EUu|fSGA~+jZrK(49P=X)#wo# zvk)v#Q(-_WL^eH;_s3)eBy5i7zmmwLd+6l$_#w|PtZP%qQ t+FjVBMMFbTKn9)HryWML}+!BtzTEIj\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 c65986b6080585678dad0f177f234d17d5e938ff..423ed55ba18f37a39fe306efff1327954aafd8ec 100644 GIT binary patch literal 17504 zcmcJW36xz$na2wyqLE#81TKLj-O$}hSQHyFAqfcy(jjI67c|~}?{>eNy!YBk!L26zlS0=^fjygT6O@FA%0AA@JWe}}5)m}ePt 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 qez;US!Z=*s244&ILX#, 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 0000000000000000000000000000000000000000..05996b220420defedc6d7f8b144439b71c75eca5 GIT binary patch literal 21137 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, 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 0000000000000000000000000000000000000000..4398907147f346e366cd74d14edbdd355e63cd8b GIT binary patch literal 512 zcmZ8c+fD*85Y_0@KKks#m?(j0*JFSiEc?;g}6@Z(RG9fo|$!I zVwkd$Ic+FBsEkVuU7-ZDW( z%<&e-w=T>j6RHW*IWv~K\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 0000000000000000000000000000000000000000..d1049348f92742c8601e96d3f90dd493b5d6ac08 GIT binary patch literal 7360 zcmb`LYm8l06@WJnc?<}G;)93m7KXOcJCBwDI;B86(+;(-X*+ExRm-{e?3sId&pqe% zJX-F=U_ulD(fp|uCRlJax#1MpQ>|4+Du^4stxc;_Wb-3)U$0DlTM!@okYTR+AU zJC&i>^C2kn`~u26Peak`St#@T5%N#H!jG);O(^!gh)P-i6%ZFvS3zliEk9z{KF1YM z#$5wZQLT5}1!WuqQBB2A?0Y{HeI9oF3KV-j3T50wQ2gX6DE*H>Y5$BXKLc0=g4o^av?`ik_c_`zafL}ceKZ75oya#8K^=44k`&mepdJu}eo`AAn zKY)wj5x4}t0{h`PIH86EP}=W=GM?wk0hBn(;0^FmDC0c?WncdQWgRa-|3yNMBVH_EE0Nw~!Ka&9@H)5^%Kqd~=D#1xK0X1(em{167D^s`35p%wf->KQ7+>;P z9~A!>g`)Q^DDCz@8E+EG{9l3_;Md`D_&Sula~YEhx5BMb4`tndgC%$=#=Q-$f-?Rj zl=<$5qURT&#NXo()2qW!>~kE7U%d)too_n(coX@%Mk2rn}ioTDz@^_&1M<{w7fztoCQ0Dy|6un+@ z-(QCkKW{)8|1Bu(-f`d0VsoVbc~JDb1j@c^DEcjT^(&x^v)XYT6#Hy|m_pqHWxsML zc771zlIjsCarHeY^Zvw@k3quFKBN4uaPOaT6kFed$k?*qGPaMbMLvzl+yjW%LiX(@ zmfBn^pa;iQbATrfu{!%+eFBn$R_)`?G4dIt_3YzC{8wT@?0y>}PZ?qB zZ0?eMlIK>WAK8M`5qY*Fgn+6dI}v$4iR`s+O09(ACxgfcA~DoJHY4&#E|Did*4Ve= zXTrVrLGj~dt}M6}eJ9x)s>?8iP)V<#g z7rA#*vVFvFRiBQ>b@$>*lr2ehYC==VjIUN#vLKGsYTwt9IVeoEC$D;49Qr2V%K~*5Mvn)fpW8*hd-^kOB6_r@QJYzt+T4kX z&9U}u(d?}$mZY|O2aMWI zOjW8t5{1>advO+LUbwds=aNHORn|MKTHD2Ow&#_KNz?H>44b+VH`q7HI<}ARwrh5x zkR5l?O|F>X9wdvN+2a-I=5zzj?c_{2F9hePHK!ZqByRop*h@C)bo#xA1)qGlnXWlU zYvKlHn5V(KR^lErTNN(RqsE#Iql$#%P~@Ffp(2L?W?9hskQV#BK<(yisNy-Yy28^q zNZh`T2T7W#w#&;~d{E&Ait)6^;Zvywp^x(RgYkpRzDTx_7p8PzXzQ1JjH969g?h)f zjj9u(u8iE5_mE|rlLm5tiS+{YUMVCS*HMxu+8V1gVO+RwIKY?DhP zF$aP;PgN4fnM$i(zmgMT#-dYgB=hr`oGtl9PGuXuZ3}m*;wYr0?6^BS#yOaoz9``z zXvry*sDpu@Rn=$`?;{zM*88QMCXu6TQ2YBhhh?A_eDV+%X(wclCEse#4 zx@&YxX&ZV=hte>I>!4oN*T1aPcT1^%x$Ykr9O%2TkEd%RiLo@6cu^X9S)2^&p`gmS zH!}6@&BI%!zdO7`-&Tgd~3iR-s7l_8feq1I80_u!8jYSzW(vm5eKJC?A7I(uVmT$*jifhpWAtW8?~?Y2gE~vP zHm%>Zwqu0;p1!W3ILbJ)N)kXcVOx6}p%+9eacwV2O}1*s*t*iKopv(&xJgQDqY6$D zO$_Q=%R$yP8s>=?me$2dJss3h!xqz3%U0^*b=BfX->&eB~Bt2QN<_O}v`4T4PP8%P|fy%Lh)a zs#nXLs#clOnz)%~sIBp(x^K9ob1$M{j~XHW zk5FNfPUETLoD_*yX9t~&rPk9Dc64~^_@s%f6~zw%lRxKZ}8qala zntLY>O&^_YfHP|)WL<+BUXRF>7;PrQA8|B#8i@E;^RQAzFP~PL-TlGq08g%{a>S)M2rtY>Qpm z2Cqq0kXRS(_1Uaxo6Oo``HOY-EwtsY3~pLk z#BOb8tog%8x-8>P;;rPcB6X5CJAI0@ZF`b2=cIzPl?tjJH;@TKB9(pX`9JpWtiRU< zH!GJH-=J;u#bmxH9`0M?J{oSfuXWm8K#5S2}KTpksF zJb7W}Lew6=O;hIFOcV*)rm0pruH{XysIqD(j8^vwl~kG$bY7C#3vN5J)TB+3-}qme zlz)MIaVH->r^x0>LmB?-g|kq3Q-|$IQ1_HQS(HuMTt|}{e;8WdD}KrR1Z!RtFqLvH zp^7YSkExmO66mU&hup<-?zmiWo0u@=wh`3Y3*}T(lJZp=N1QXkoW$CUYg~2r*_&<= zK%OMblvG$&Q^znqU20RuYQxAWd9#=%Jx, 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 0000000000000000000000000000000000000000..c784f9621b9060a17d61a652971e85a732823d3b GIT binary patch literal 18089 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3ca7065160c39756f1ba99ddfe104f9fba7780fd GIT binary patch literal 15264 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1f47492f0d020fb800ca7dad4f151a6154d6c533 GIT binary patch literal 431 zcmYL^%}N6?6oo6gnx$(OS-4O%%}k|OQ!8qJpkT3-(S4k`lS#=WA<2~5_we<67848Y zfsZ8Qo^$X0JwN;D1f2vf0+)f)z-=IE5NN~aLpWp2K})OGPa=pd!o2u=2*<0_6$VsgwNyP8}d5-Hl%$zr~k9v9BKX)@Nzg9@{Lo3M\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 0000000000000000000000000000000000000000..0da366bff1c38dff1833cf1b4ba54bf870ac3fc0 GIT binary patch literal 445 zcmYLEO-}+b5XIY}{ucq$K?v|8x(-wkW{SE#-e~T?7 z_>z}S+j(#1{hpruG(3(x&pgjPk3BCv1A3m{{`1D4q33|P(M!x6ndamTjTKrk$d_D| z8YV)bi56IEq=gk~ss z3!0U4HKUZ*b=w7ZQQ$TxX)ZQG(|rU|ga|ZD2wwE7dLKU1*1?>??j@Q{XXF3)Njr{) zS~*mH^UvBxbGUW1mRzVlWED3S-QYEyklue^*r7l}#wydfP$h%jhj7tct__!DqRq-O RQ1$L=2T33H\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 0000000000000000000000000000000000000000..fdfa8142790fc8f4aa518251c3ad4542bfaad6e0 GIT binary patch literal 446 zcmYLEO-}+b6vXIhkDfjB-~pngyBH!CF)AMki9|wHJ({}vcDJP4Hf=%l>|gNj`CDuu zfk`HPZQsm$^LKjk+weH@Jo7yFJodcw4Cs0O_|F@EhMqmibH$nsL$2RDI`lvRttea0;xZXjpLx7Em)~ z{FBKRYF5r^N(j@s?SefoU=ySy=WDLWE(0z?1`V#b0SyrdJ{JM@Je3NUyqGnI2$Qq=q4E}Dy#VFFK- UsVzlPZ?ATc^wF*y#Qmu84~LnCj{pDw literal 0 HcmV?d00001 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/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":"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","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":"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","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 0000000000000000000000000000000000000000..681bdd4d4c8dddbaeb4d4f2a1f58c38cad92afe0 GIT binary patch literal 106260 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�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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2b047ba3bc1f6566b76e565553bfa7a3809be1fa GIT binary patch literal 3860 zcmd^CUu;`f8UMcP`^VRgZ{l1#aS}JXPO#m7ani)GL%O9^>7OAg5w^C{BqZv^H-9?E zb{#iu5fVY2m;`+&NE6aDcp48ApiNZ=V(?HvnlvGy@C-tC(+5>Dy3o=mqdr=n7;ikRckN3rcze(jw*25h~CW zIG=B3D2Sm^+M*Cmoq6&63Ge&aZ-O`n>bbAJI5|Ce`&nSViSdP{^-A-j`cMA}52Vpj zE4Ay(cMiZj($5i@wN<}T9sAzT_Cq#6E3JZ{Ya00UTeL5%uD7oZ(}M???-PvYYK^5z zy>Lw&d@seDU7{(W!<0uiBlko+{Jpgn~jZj>{q{jo+u`6`JLFl8<7Wi zG*-I->*3=l3glKlbU*$^@3Z$Q+R+GpIhzzId5c9FLz^hvoe(BqbN*zcVvKPPhyTletUfzwj+GKt9RKpq=Ty z@6!;yDn{()9e9sDi_52~bUff7rgm3Qd+Dsyl@t1-246ik-phN0Ap%>F8AONCU@zB{ zUkJ$=Qs^+=@CxWU%_|vQ=s`?;8nE;jcXp~lR>zDcS=hA=y(sli3<9$M|M#ayIpF7A zH^3`__))S<-Uyd831NVENP{;ifM=zNhXce)n#3%CN2S5n6j+@`@<#qiga0W&W=oR{ z4-i9X63ZakX^0L5uu2-@gqU`kL=4YidY)G44*iEO@LPOOOKB&xs&+3_0#B?a{xRPt zoMRp{lkt4c;lwjMFnx?m#RB(oyqIIMB6Y)w=r;|=xT!}RqaNXZN35M{-C!Fe17F8x zqt0(yVqACL-|%;&=9Kff1)j-FkFwdz=GeVA!rbrhbfhmFGT*RA-+U)B)E|kv);rOz z-evwX#fjX~Gz>|IPOf;2^SR>dx})DUjJvvH8+Yy){6~dBvK{@s_jHFeRUwE2N)swo zd3spjJIO0?bz9oovo3q{ST~r zQ5HD`+9_H654N=!bKTgYWdjZ8a>GCihH+7tCwWN7JAXeZI^qw>2y}R*@B=_)S#-9T z8#BecqdZ+I<_>YWR4j{4$;5!N7bMsNwq+*X*JH+wNDQ-nTc&>LhVj~GDDNA_jhBQg zBC*H~BX;XElwDi+HvgVR>5K3(W|vhLxWIYKv_>^V$>D-lI>x!O!=pS{Rs*;Xu^6ym zW^T;-(c$#mVtPLAgwshkr1hn2yXR<6CNmTc$A*mO6n!YJsP1gm9Wq!c@Z{n2;#~S@ z-$WrBaYG>^mC5wX$HL(uyoVEuiaw;vXx`1vy2FX2Qh?oZl8FC{*rsSd&A{?}u>{{C zN6-(5(GuE8SUqMw1G^>c$l~01UU_mKLpsjck-^1*ZN}Va^cVbUdL#>tgXsWf4F!X}Nhj!u$9n=NS+@IQ1|qC%)0jWPc}>wF z*p`r_h0F4iSe+D{#ZekhN)qOC@UiOR#nQ~(^!_xyTarbLbjyy!-0ONYboIOu)z2dr z7Zbuye+$`oSJ-@fB7-De45l{i~H650soK&F~D{*<&qQ$Q+yB}Y%mEp93oyvv7^oJ z?&XNOW7})eIrdifr6fDzi+iQT1)Vx0|Bw#J2|@j^9L6`980DipYncVciBM%#(jhrB zy&!ccU(iBuwd5?5cQoau^aHb*a^~tO2^VTwxB7i|-_*WhUN3xk-h(k34J7;aC+y<~ zy^{C#Ns0Hx-3s`2dNQ4#Hx7I$zcbZr!dkJek3Q&R5PJDfr?Lq)TNrh42q@jfI`EM$ zHjo#myVwN%Yh4_{K9{>VioE#&P9p0zCg^Z&l`FMM>xsN45-<3zjkQMI zJ5rc>BL9qE_gj^=U-e$T?rm(YOt;(1-g2w4?w!VRey!H3dWXJ{moXRKG9lRS#5`f zTWeIRrhlzjsaN&dTKyGgy|L*}w2^0xTGek^&9$ZWm6qSv@)cvluOakEAhUzQ?bQk7 S-->SuSleiuSDG@Vvi5%*T_A4& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7c0224e6c63d6c57d5d279243b66ea3fef6147ed GIT binary patch literal 3640 zcmd^BO>7(25uRD@4|l0uiCR*kBwATYCFws=vP6-poXCdbpA97R9CrP#;>Lhx$^Wa=%$p zv6A@Udsm#d^S+sRZ{Ezj(Gn9;jJ7F4Gv{8oc*^@;_8UaJ0QACFUYMSpzVkGAzK!{% zm5oa4qsCAENu;DfskQpe)w_qtAyO|8>GgHLQl0qjI|rc~fJ*BCR7HWDehvD<`bOu* zC_Q|L^*+XYq264nSRb2J*cUM$->BSZafUV^PhsvgDjWXdkDUUMbr1X9X*D-H_Ah?< z9Fg6D{5J&O6)-YB#G|kvpL(1S0lNNs_itbCfBFH%x)#CD=aZr-Z}CWBSQABi3&I7= z9IB8hS|MtY1rEC5BXWyoXo-~5XU|_Cr(WqaXq41_^8Gy5Yikv(-(8uZCsGE&r0=2p zXMT+|z^8c?*ty>O0gccr;)E6f`j}^V^-Psc1{~Po=?dXlx;yo>1%E_{)u-nBWsi8M zz!y{o(NPfm<$4$wqE(<0fundMD!^4*40Tk&16yJmu#A{@PpUvy#fmx^IJF7881<12 z1v&r!`_mT&;HSMXAS!{xQDQ7_q)SLr7$6@)h$aPytdK-FK(2%&X8|HAgjiExbcy7R z`V&I@DL`clNreZTqUS)aK7MwAB~p0x&|5&aEw{LOc* zkwGi&8t=w>c31gN6en^^vv4FKHo4*n&gY7+tB!h4)9$H`solM+@gG7Skm;!Jzppx^ zgdKu7pfsUVm1lHC(e%P{dNJ-q(@8g?45Uo6?|5G(GZKy3Bib_|J`xX6cRuTmXdD{w z^wIS4Li+f?R3U4*k%*ScWcn8EXmkYc(Zq6ykEk+RbhGpBXd)RJz;C%p#Q#NZQ*@B# z;Ca4SLhMi@7>C4ZN$oVep3t9y-;#Dzac(jnM)CkdJI>j$tx*?$+v%K=RI;hvyQwUg zQ;y3?9_-`ueS=_J=dY%{WxKK1&-j(}SQZwC(*fKX35NTVPS6*R_XSR}Y!2EQG93D* zFn@&mnxZ4{Eg?mVkmaSYx+OS|t2CLEBFyIy<8X)SG-_x_Z-X&WAb zL({0F{a5MYMXA;c7oPuIXPT0L05i-!r`UyvgXW|(*IX6ECN=_!{ zCg&%U3hk1&R7SQ$1)7R)S;_&F2;oc(!Sg(w@ zXHd{#HyD;{Ce;F=wvW$-^(8Gt$5qVDm*-&mn8i-YrSrnUJ82pmvb%v{qLu8Qe!^eg zQ-_MzHSAjRd;29~?wDpx2FKj)y+X~d`tp8l2|>5d$QRNPxgqEuhQs(J6XSfG=MBBU zxDjDnm2ybV%`QnF$`_OfLM=7RG3KZ z#`jEDU!x(O>G3-7vpwFTOWf-5G0O3W)hm_8T61c(R`=UewUuULwb|%A@2_2}SK5!2 zJr=y=w>N9ehIgzm^H}*gzu~tl9lz?mbkp11TAS^3R=w4BbHh7}?fiPZ>9yL;EB;ES zu-@sk7N@7h4Z#a5%?+y36?_jjXpNdQh4|E{PCm84*JuS;1DK2*dLH;1U4y&=`IFl{ zx#p#C=S}P^J9@}y0pH?JZhsE;jc|<${Pkh!(Mxm_<0fsv_gSDFoW}#TvBw6uv%S;# zI9DCKN3BqH1@vKcY;crK zwm8OpY~!C%KUtM_yLo-8+PvPdRw`}36SDToy1&(KHm2IOwe?O^r1fT{s{1!ul}1&q z*BUQ78_g|$s)IUf)~kNoXw_Ca*V_I-+YbesejTYt0qI>X+F74M{jK?iFtyE&eyt@- HhTi@U#ZLuC literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..98a0738c6e82d031fc84713f9abd534303b1265d GIT binary patch literal 2224 zcmY*Z2T)V#7QRVni6JUR3B8E)CcOm^FoX_Lq%EXSRhpm#q$({CDI%hD1(mY&_E7eUG{0-AU6&3iNN%zSgt_ucQDd+tB~oKPzq4uAk)aMS=Nj-M!v|M27d z|HIhU-T(j~9H6QV!cI8lLb#Q!f)c11fgB6ML7`4ZgX~8P1hqJj#{&Qqv*7=H!}~^< z7nmaffCcok-Dr>kP(GeS4=~pUeF`AdM3XBdeLxY^z z@B&QcjR5kouLR_R$3QH>J^Y9iu#T+<imK{^I@ESh|2|v}d}950OA15j?#*5zq-& zTMWOTqAtS|8npKqL+>JR0Xerhtib^&c^esXoG=k2OX9snw=olG{H5=vzEa7S@@{IL zJrk7WUSSWIO!_@zYvFbiNw)x-|xeMxF4ha2tbzWk*ba=#U_YtMGt~R)*Jq4Fm zJft@}Qs_RVid9~1!IZrBQ7Fb(P=3d0^GykVKu&xR#v&&seX8x7#Qj4o{c_ktu)dxGMXC}5ViAh z6U&BVGWhm$?E~GWb+oB+fz|qDjhyY4XU=tg?dc3zOm|5*NOC#KxaN2?7Sn-@ycsxf zsVI5T8_r1FGEy%w(~LM-sFYHxLTxS*X!=ql7t?ffxG0O3^WllVfx9F7#j1d3>KRe{ zpniVjD@T-<8riZsUf;Ejsy&z9lV5FThFv@|Z)DNKE^lQ%w7DR=*Lz}$G*oewCWY)9 z@fK)nv3G_x$A$jmZ}3v$s`Gi*RA2joR~OwL1?0VobP673{Y^t0X<_UrT5gfhh(C(W zMy@@;zTFt#&_lEbXr;b?$7-4q)Rr`HZWT5=A1_@d(XsJ>6KnDWrC~plo0KBIG4Y%w z;EXfJqE<<}rRigxX0dP25Z@S0RV@nknS~hf@E>umpEMUvx=*$(9WABm+CJ`st9MW= zf>T*v-4k-mZ;!XZZHD}LPDNx~wY`e)NY+QX-7m@Z#20JJWoUO|i{!dguQ@Y(%6;>Y zuPJK}D^ZM=Hds>MAv%tFjY@Y&?b*9r%lBWh)5OCZUG@(D{OPrD-^)Ye39>ql7}Y)E zRiUBqM`T%bdBberv#R>F@CiV~TkLDJV)NOiuGu7=^ymXIw?)5@bb47E&{pb5wOiiCkpb zG9fg4Lpi#)KL9TaEpf3^&S$?S9~@n{`ZjWj^yzsdlkBm`!e4^rRdU)6~J=aWq&aD*D!>q^|X4K-2M))TkE(V1(91rK+|x=dd6bi6tU&;Bq~qU>Vy`d;zoY^uz&5z8DKHc z$;-~3b3285A4N|cyOf++D~}L! zl~-7ze-F~(VhNt!iik=akrUA^p>uV=R|##?i$17(69XNfH~qEt2kU;Azku4)it83d z1}~aSL$+os<-Qo2*bWj(sr8+AN0V)Bs&99zv~?J-^SXv~yvg>Ly~Wk|{Ua_0k9OEb z$W+a=oZG$ovi0F6J&Zl#OZE3bwvGc!rIw&gL6Qd(Iy(93^6~EawKsv!v@_Msy*qOe zo(wM%5X(Miewnz-WFnE~G;`rBek8#cFi=HU{?|_eAmRy3{m!0&&Vd-jKH%KSg8uc6 zKp+^2S^EI4T^ypKs}&qFtz{9z#!v27#?6_ z;T5O>TLP1y3j@$dNE+BTD+BA_r3l2k?^htM*q2>tJ{^Taomx?U|j=W1M%ohzC+I*T^F<9~8PEzdjY5rt{ByKS#zY zJY+L!im(NG+XHzE=jth+A6I+G5utmB>1{&MW*ce{rq|AhRNIhkcB+1p`0s5 z=AJef8>h_Sp7=Yf<;x-EZ70vzk`nnZs$9XC??)=3(`%NH@cb9o9THU|lVLlLzi+h9 zS@}D=PpaRc>+zEQPWzec*6cKr?_oS^*tKd9l!lFpU?NKC9X?x#j8-% zrFvca{n9XIqLsO2DqbHJv@5oUc6Ey@Ffe{B^_&4KX&U63( literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ff7d86d55e280b0b0529b0953a93996a2ed7ddb4 GIT binary patch literal 1680 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

7r8$?kb-D3z%-c} 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 F002TuuHFCu literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d7994e13086b1ac1a216bd754c93e1bccd65f237 GIT binary patch literal 138204 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 literal 0 HcmV?d00001 diff --git a/filer/static/filer/fonts/fontawesome-webfont.woff b/filer/static/filer/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6fd4ede0f30f170eecb4156beb7235bf01fff00b GIT binary patch literal 81284 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äY>7uxS6S37IVP_>DW-kg%dn+sFHLnFhvXTU%&ox z!`Cnp!L-6VIqHv|Od;nPhH8CKAv&aFGjqp4uF71eUc7uJ8BAG;BS5Ka2iZZ^rH8j- z(7S740&)(K41!|vV+LR(W*o%TLI|D>2%}d<3ou;cCm|k+48#&x^$7fq{iWHj|9Xb0 zud`3?@O%PXQlpT5qnI83(!$iEEbOfLP#KbLUr#*AEk|r64I9oeORCFa@wFT44a~7m z{F~4j1;W8V3jg`?6eZ`p;inVXTs}SiXfc&lTi)ufZX+a+Ml9)RFC(s~LH8B{lJB~W ze|ZyfIK;(TOj+`G8A}*kjQy}oZ?HcI8)2uUp&W!tmJ@ni6k4qIQy-`n?(DRQXV*qp*NXqIM zVp9$lGzv$D|COE*8ctnU6K*>?CbnQ^Xiog#RQ!!lCT0#EL8!Z2ubA>Zrtq4S!&bvC zJu8Pe99U=hS`9R2*5A(v=GXNrI=pIgvy$ImdF2)n6t;36hT$Fm6G z&_XKeCNZGE&h2-EF?qc$a<26K*CFKvY{RCSEzclYKY;W z#!tNA6Cm;G|G_vY=&bx+N`%Rp54zBbX~ds8whAe&qGo z*XfgHX$4}(Le1LXg9Nil4c=v?Vv-jUHcA_&BEnL5ah~aO z&U!a!6GX|v9eA-_44y(}Bov-wDVgA(XQSW^95SR|a9aN|JYV=zCfaLJAHvZkh(Sp| z?GSsXxIvLHlLLhF6eol^dktMX&2khrwkhn;zrS{8CHgk{8~D8CSy59e?REBRm*-it zirPEt)5Jy01vz|vlb!e7MZeWbRn!Y@zaMrw9WKf;S2 zZxJU5eNwVEU|#dPe>d#h(fY|BFf&xoJM{*?$G()xl@?!Z+xe9`>gb{UhPP5D$N+rL zLdG5^YPajie-}Jb3vhTt*>N=4_SUNTX>*uqflXP6eulY+UH1Rd0Fz22DF9vo`N4DMH_w54} zXjr$4KsiW6BWx8v*_b9^NVmwZ1q}Bcj$?AI8Om3$dIEW=e3oMOu#hiG(eC0tU3U|2 zfXHIJ&PVgXs6Pg3WDtvVGKy!i-XAPyPpF;aG5UUC>nbXqT{R-10`5(^hT1V!|AMS8 zxm)&}BM8SeX8c2bMLRm>EkFjS1UdHq(?q23rp|D5s^k(j2lp0yAr>ni5qyJi(iJPT z%h{YG<|Kv89A%k{8=*w}{zLGGUJ@`vxO?IlNPYC`nI%^4_C(j`1MJNbYR9t9Ak;4Z zn=o?FEip)uj~UD$DF$MmaQF&h+_XRSGt_>vuxldcR>*lzKDRJ z5+&n-5cmq-JKO!TsFEp7Viel^tdkE6e9^u9M*x&6cSO z%D+VWdB_6V!nQfna+w(+zqbJ1*rA{}!d!I9Y5#s&?+1;*p~HD$!d$Q47$@Z+(tokP zyjdz)(<3?{Ii`7Mj?gy-H`sjDawKRHuKW)(WO~;kP1+eXhveVzu6-$IX=~{c??}Lw0`+BBd2HNd4xqlrM!gJ{}V@< z4sk0?6z7VdrIV*fM;B)}5|(HF(%VHzeoMaTxDO$$V#R^a$~@R@i$IWxwR?Er?ilrl zoM7!h#Tyi~v*IENv`yjjd1>1yqYXE8zN5v^t~7I6z{%6h3vQWOAqsA0JJAGl{BvUy zeJ13d*R*e4iSp0;yl?j$Fj2c^alGU)TCGi7-tFI15)`J`KJE3FauYp2P;(!I zfh{GgHwXg5PUjwSV@i((L&;)I=#0l%r$zamds9fq*2b3OF*+DfPv@JZq6%56I}@O* zyET5F*Mynsdvtx!B4*93@0qQKjaKjQ&$v?GEcfnK3uN4VC@<#(DT> z1pPiHxE(Gvv3wes2Lf>j(o@{?c7s!uBlUN+R)@Ju##DY7UO%O+djDZk4^1o>k?bnv z!jvgG3#dHEBm%SeAS%+KaM%=tz>6C+(zi%+jBM{N1~PE@Z9M6r!rUK5(!FdiwwL@< zNvFk|=i2sWT5Q(N03I)Md^a-Jn%TCxDShQ9P0@w?qqjx=;g|Io&Etjipey4)mrphi zlc7(jf!ts9!kENTBhiaC1ehV!+~Q0)32MAsfpQw8tTk$%2jKAE?S^He8WdvaTT|;a zC7cJSJ8*0%PEEtzqIMx~vXSLm2n!n0wk{_$WL#;P+OjLV^am}W)YvhKwHP^_q$e4| z4=|9@>6SORrYwn8W8dR-IGBE|{+$&%MS5m``N#xVrG*-mL#?k}RcoGX_5s|TvuB4JKK-r!83tgLG2((d z{9c0fCm2Qv4plaX2c%rnchw4Y>#w$|aO-lDN#U(j^`1?l_&qH-u=h@oX{lV2M^qV_ zDMkZe#jr_2_r4Pla->RdK`Yv@T*FXu3^|sB%m`2TE&wa~-s3&+he5wT`VfG*J;h}8 zB`4&uOhu}|g#qfGtY$777bm{iye&o&jmH6mrqcBN89~?3`JpH5T(oWETfK(FDyoX& zRwkrrXr&0_m}D4`522V~!XKwK0yuAr+tY#Sq<3z~9%#t=Sy+T{S5A~)InASS(XQDy zeY%0iV^#W5grz~PqJJ20k=M8y3a0wx)N^%tAWt8_NCxhu>d(V-LrF$2&3v;cml)E0*Hzjf~_Gn0Ca^K*PTa?cwfimRkg+ z#ZPl;1S`bNA+cEm@Vd0#(PV6{OCZVO}(d^8Gu95X0 z!4>64+LdtETTg@rE}`1WA(sqdg6O^{rRZ$uNYw05qsj{?{^XDh;SySTP8UU1?yx(X zICd8=oF`%DSQq6FENiE#9V_sCKOU_V? z2=N1h6Ga;B?t``XgBwwX!+@Q>D8rMO&LyKLc?kJ<8p@NIS%-;Qe7W3!Fd|j6-xB%Y zG#S~Jxg-+i@zNlF%2@pUDhy182j!nRlGvtf@i*F>W47I?q8$RTYW^Xr@r!Vwgp`pH zx#7yRG^+h|1W!T(*SlHqy^SHWORKGY6_U_FwtH$0q|Jar(}Bm_ZP8;R=Zu$40D;2? zc1K`=joF;x!v?>R;Yt>y`cm#@KFFX~gE5zzX|3*++2oaro*s=-#X8Q=^QVPtgvBig}xEK5_MYTVDHIm-Sx_@X@Ovd7r zMj*Gyo9~peUTEf$tWAj)BQiLs!kgH1opf>u6A$N42m9)P*@|4hr@df<)STpD`s`*M zc8||Gt@54Y{;`Iy_)l|q9S&mop(y46Zc@#2@ynDQu`g*?S&w3vxKZt@*q{o%1KzVW zx%xLm{czEI{_-Nv1*S~U`cvt2OXP}`d5e>t+&DgGXCJt6afi785J2{?=Y51^IE$1NHvJSt4sE~8na4SdP|YB zTB4W!6n>D^I0KjAid8IArAuVomO%H5bg@PxwL-1*a)RqtD(pETjhoyYgp|!K9KV9L zT@3Kg%}i<%%vwU(LZ@o60`){u-ptzHrf*HpNj%)tt5a-+c0-1h{Naz$rh%o?e5vYY zZ;qy!<34P-cYQxKS_cAiOWy{Tn~>#cAfaOk%)YW;OWXqgJP_8D>U-b@<)Wetu;_S= zX4P?o#sDMQe2T-Eo6EmEHo%qS@PhEG{mG8GTfIMH26S zoO%a4`geQDaBq^Y#vGjap3OW@Z3!x@@{wG*lFGvDZkIb8TwDS#C4#z}DU6l|R+>ZX zc?urRoracps>qqwvGXpSil7;0pbigI`gM@)!kShJ$cDj>%$?-tnAFg8Z(|B`p zDoU?84s(k7HHNdEC^kBT7fTla-V zoA=9%)lXB6;S?@O;csc!Wnuf<;4ZU0oP?0k2j!r~M@6QOy3Q_v;2@ZhS(c|a#f{OZ zG|KH-?QuobMm z?OF3C*NzcmfK^zV@de{6?i|TH9yQ#}|yTA-DS|yO9!m_r1ZJLIeH!GB?FM-1H%;6`sXe-!O2-4;Oy*$9Hgy>L?INCpt zhHPBuKI<*?@&l~+_(EEa16}x{OID955lCr;T&dU zS@%%Tf^^1o@%w^q5Iy3v@CGn>New@aHr6H_^c#yODJ`1hqj?7{;2{qtS~8td3>hZq zkG%&?Vuau;rNTs^$&~c2|C?nAf10HDZ6~B}}7m@E)Ko*U=nn zpO09a^+dka5WPa2`$cNAAXJJlL4-BSdoauZ-!JbbGuMh-s9ehDkEWR>>&7qMJDP=5 z`g8AO$ohp!m@8!*&60#CCU`ll-)91|UrKz7(RofEZ@*fA?AK3R6$s>XN%Ov7hT6Kb zr$o`-2yhpT>HoUY&pIe2t^MjDKB7F$YTm&L?ph0wXqB!mP4LHAySbsL-kQNj0b8|T zmLR8I&GZKGv4tw3nLy4NQ<4M_Pbp<{y1efUU05*|G;=oHOmM>T{(SgbE*ESGP_h_gSqXXrkp)aQ6>$RmTH3w2fGa%wbG{^Uds}lJp?K zE`x?R@W1&?(y*QKFb{v@3vhb;Op@x=UH6CES;&hK)C3DwNOEf(OD=o)xkyZ!%79_WUqz zZ`A{E?C1{z0($S-2K8d_lWf)W{tV&66@S0wiQ1>=vT&n0L3j0$o;l@}x{l~ICS5n> zXmd_YwEAl3{HZ17#CIB-LfJ|-VxK@zsX*0-;bVLvi~lLZFYxlByYw-?NM z)FIofae{&#OQ#R!vqC;qj#_l-r$DMc7xlX^1A5ZJ12?@W^eyRQ1`L? zT@WZWV}D%g=@x@M`fo^YdHH2G?*K&4)G?QFEESAi+?2RS{xlG-W7FVkBwaggMtM11 zoX_t{m}1sz(9|m`y=yQ09Z=~MGma0rpmu9(apBu<5A=zmIYW=Qv$4L;uKf*PM)whU z&Tj4Vp4k13FBkpZ{zi;_+*ReAwyfa7%Nhpz=*M_dOf{_j14cU_&Au|`ct-7eqB%@J-p05x2eKU&@| z)6IA&2MKg&IT3p9m$G(^mBfjm<;bJCDkE|&%3srF9D}SAF(kx&qnVD}gdvdNw`>u3k z^w;7s0V~`&lF3U9y-`?DMTgI5L>LDhrrQCkvhPxid4D$n+g_E=TYVBS2)pnX&CrsL zAU(q^gZ^y13wkKfQlant!PhWj0g-`-;KjXWqj6sX+>mG~w)#^cUP%)F4X*Ub6n5BX z_^0C&3AVgV`HbI?+DX2AA?-=~8)Uz)Mq1d*o>WuV3qM<^v;kULMj1nY{%ydjtRmYT z$_wBNfl?M@EcD*m@CmgIC2|NOZ2mFQ6D2kqC@lQ0VwQohNXpIG?^G!5+D$&kbQF69JQ zVX6;Rl0xIcx_BI~@j}HIbcYYX1j#EBjWDkB=EGiCfQsov!4Av^N~$T;=<^G!GHxG~ zwD|aY{41G1^&*{VKuJ>$I!}jo=KZ4Q=!v!TOT@M;A0YM{deN7z{B4$$L~DI-id-(I zu*zO#x$NF$YH17$Q*CN+x!MC@0q{1&H)Mp<^lU&=(}hAF-Lo+}4a@vi#*lMHTC|PB zKLq=l%1XMTc3-~Gs$;@7N*xX~8)f~FQeM^O5S0NY_CqIwsRG$T=WHQ7mneqt+APe|9%TYPXgo~Lac_1|U!W<-v{T-G{ntdJF zK63)^RT_6r>`K6KRA^=x%4}7qfGsoFL+efi0?d&9(qJEI)3MTfl+>iw>WPH#)}^_$ zBf|>0DGJ)+P39pe-A3Q}7x8ZjUbdUfVR)X(utJdeZ6T{hJTkIGOX67K?`=w-`KwNvBt0_?(8|bst0)r4%AwMx!ZBp%S-q!8fr{ z4PCLaEyvi@R(TjbR@Z$sZ zpmN!pqoNewO=GdpNq0GFi+Fq_ynj!es~A`e$o0D{k?KzZU-I$rU5*$dLBDigx{7x8&@jhBNHAW1^I*^~Yb?y+4BG<(@7)Uq!ALoi~BtQCn|O?T56R zXGvByCu40gCOvkUPE-DMMSkcB@eZpY_Y5F6s4YGYKoMynRC4mKnff^`vd8+v+~6!f z^TpQGicc-@4%Hj%IRWm*K!}Smf7x@=AJ8L#h0cmN5O)$EL|>f*Y6qB1t-`e4CstXR zkDV$todfK~ZKq2$*VDRO1vAGloNZD&FZrsEzvyi~r~D%4ec5cdnhaA$Sz~`PYzMPA zUY_y`8y@{-T%v0L{k+dKI;DX3CQT>LX{LtYitOh7T|?@Nw^FF+BQCZhIu>bXMag7$ z2PWJ+O;I*{W6!4;X7#4J*n<$WFHD`M?o}=i)#*kTo>#(edCznR##k^)Jo@kX&&$gb z@weW9?03amSPgBQe~cE0A$!V7?G-`ibn@=XY92*2*67lZoSG~|Yg)i(>m(|!2vc1J`}1Q@)OU6a`vZPT@6rjAI8~U zUi7@<`O%G|=g^z-X;wc|Fp(eiiK{%n}VZA@cdj%?1jW*V{KTqVM7 zvNfNE_9{r6tx3eQv8YlkrkW`z7B5-{7I1v~j%FRW=xcWm?%JunIlE$JH>4A|_Rvtc zb+vb*#af}gW_l{H@!#0bCr@BSGLYf{rN|}Yopo+AP>!HlSfv{?q>z3im`574bu1dP zdd}_e$jy1>so2)g0A&8T$5>U6vYyFseLK(Lv>)CjF-ll}Ry9GeCxr_`S}m=mm0P+p z*><8D9>2K-LfTd?LLfWa;Q00X-4k2rkYq{iZ#b*mU3JHm)3Dd2@Ae@NvDf{B!!;@L z)vHtVg?71*5EZx<)YF&rrGF8HF;_C@Bo7908Vm-e(!W$d6{Ihj{(c{0W#>baMauUF zHXjB-jzwx(O}4kzEuG0(g6E?>k21@#$wv<`Q|9GeWezNI9|> zPd6Mz_c(6itv?MlsfIX?59jh`Fzk1~cFr~fOk<${LCsEnfP3v?mmH1t?eE#l4viP zJSoGc9XjFyjfxmzh^6so(*sey?YC)*7N1v&P9z9D)Q*yfRJhkjoQL!czS4`UXUa?5 zwLnnAH}@E!w^B>&zAP3>Z*QbCKmfC<9lA+Kqs(?@730ytl4FTc%iym&O>O#Xb{%F^ zL2UCtY0b^i?S%U&-y8u2wN%apgNf$qPGi@zU^^U2d=iH zPF9=J93p%wAe3@x^EKeS^@wZokz**oH%Ee*>9cvk$xPAPj^BK3{D%I6DQ+l0cUe^3;TDdNkCv)p>6Ovfryu4Kn z5(kqX!B~>rg#A< zi61cE&O;h&uG8QI&$&l<>(*mRas)?go;s0zj?p?1P^gW4NyT^hZtDUB`b@-X0iM5h zbmq!hBv4|GSxnq%Ot^14e&5tBv z5?3U~S_G45>CazCxz6OR7@gRUTQ}Mh<}6ubUd=)tvtBH0v76gmlU25jF+PKDdm=90 z`FkxXtT`#=BLvL#W=bayse5dfXNZKZVzUEix4s&bu)B4E#=u%8p|LdiAdxhL?Z5@E zC&~vU*1y?<<|Xw0>Ygf6!KlefC=#Pt^`YG^_-lQL5QSFpHU&`CFsF!CP@MgRHj&cz zJ>+L$q|7s7R0VHs$q}rQ1wDtUlsnv-+yHT3j)54PMwfuZN6CZVn6rGn* z?RHqcd*Xl*7^h5UMzS4t;l17W8Hqx!C~&>T))apj&8R67zfDcmgiOL?P_HZE^R5%jc$U!hhT*(ygsH#q4XkCyKO4l zzBvRAI8jMhYYEy(wB-cV%^Ga-@a7rF_cY|gE5JsCYZky9*>Lf}FJwtlSJ?39jWB)u zLCi~jv?7kgQC+KMPJQHx|DC&he&Oz=F@p`oh~=3lNZ)IVX&a>2zhoY7?Er~z!-ng2 zx)Md4e!)~wRNZN3vdhVQm(bIQ`Lq-2leJ&%0|1n1{@c^SxP6`z#5GXdPhbGc#-!5^W-J!>9P>+ln zFeS|Jijq(4Ec;rGDT~gV>S)9L{N}is!Y-w!+H{h1n ztOnLQa|ICBoD4nAZ$?Q@R|?&zvknB=r>}kd+I@OWA)b^@LdXV$REf%m8@nx>6G{mcGorO0nHoKavPx8Hdt$v|ZG_M9gUMosZgnsqs;ymzI7wihq9@X$>MvCeO&d|ebae^`ls z_1yHcd;7fEt`l4JimA%D3VI*zg>*HR-$&z1b{n1wfgZW>Hm%-DDPC1Pz8AS~T52P6 z&o#I5R!ua3f4?qk?gd0%DJ!07J?@tBi$`&1D`fL$W-6$6ZyFBeeNL6laWt}*wou$2`ojNAA{t~=hQ)d15RA9vZCQ)*UM|zBDJwsnQO=h`V zxqZUI6$*7)w0tAuj3I8Cw^>!)$g<4wkys* zxoJHvOAlftwCOiWNM;M!I#a->UD+*p{1->(xhTW$4C6b&5I!xiZ)elpGjW$Ws?cww z!$td|1>qsyE~6k#=P=8wZiP`eWF83tNlai{xvpm=)jWX#R&O+%Y4%q9vu4UrW`*rD z26g7uA_20J38u|N7vCPsRc;0$9P0S6GbqO^BiNp%2K*LBRPwsKQ5Dmnbrruk+$Gt{OrFnB zOpEaxWa0b9@=T7e`fC|C_lP~K^}@_+W_hFGapq#MGrU+Uda0{`yX(292OTta{AVC; zonm;qS%&d_*Im^Ty&Y}a_LrfpyCE|=?zaoQ?&fokD%|YN)_yWavF^H|o^`t(soWR7 z9qG{V&$37&X!&%eIzX}5*Jo^ECMAmEA}YzoNVzTtX-Dyw8L!NhHrCt#@jjn;?hU?aYFNx+*$RwP$GwqMyEyWPVM)D zF26G!F(A4IYSZOyIBjHlrQLr7t9(kHD`m8{$%ay_ADqZ}0rvg-XNd%)82kgM$@s-$ zjF7rY_FDb#hT(D=2=9Qj`qCBr<)^T;ICy%S4DHN<_(^hO%n|8qUmNmOmPSDgr!ZkB zpP2-u$*>gF36n!mR|F!u=$wtm&U}kfBpwzc6}}H6G9?v)^u4ugft-#^v72$952wTOy8H99oVZnc8gI z-jj=G=W+{Nc)4lW`Rji-lP4(^91)RlkCwB1WZ{z@SX$>cm3Wu`)I!>9d?t8&xTyOZ z&kvdjNmX}LHa0glVm8(-8!p0h7o&a@6YTOP?RKm4@O+b57g%p6E*t+NYnT11g4bRt zH_rFD&Xc!PJi&j^tfxs2XHOoP(2@bEmV16G3YQ~Y*>cCvAJl9?3xJSR?~M*u)3dE5 z;`pKo%}P$S8dPxg1%Z#{6g(Q_ITU>;UVvS=#P9T6AYLnO6g$s)^9*NEE+vC-!z_1% z@&fOSJDV2dw0fupKC<8~(x@chB^TmEH7M6ZS^-!q~ zm3UHAD{8?J$9K!eB%pFbCTg-8C z=Sa!-_z=te{j@54ev(G`dORX4|1&}7AriM|Z7fTPRL6j69EDjAK|;psSdld)YeF=C1e_)H1rW%}=Ln zxOv&U%o-&VaKB%tk2z^#g*Ul$fUD`0->c+voavpfFP%2V-gUwy=a@cpPm=nVK$$;Q zvKcg?AL3nymA`Jn5LF6pG>+Wr73>;=@@vSlnYa&vliNZ-gT@o8#*gn~cqmWiSA(eY`Z?g&;z$Hb!kDTgVH?C9d0U zF)Ud}B%MXFh`thG^5r4C{n{HMmk#A1TKj1yR_26jIi6kALj!m3Xh!;?c7co61{9{? z{f^^Wf(0BJ`F1V?w&qH2VUxAo&CR{dP@ZW~S6|K@eBx+ZzF`rUGX#sCZ!k~h)84?m_bH`a#VjA< ziaLCJJn+?6G*B+O-BH;v#h|mo7u({a0p@8$h|ssDD}1P(g2{lMM$tGhdMr|Y;K?cO@U6;Xub-QJnbRrG~Y3cUVgN&b!wu(F;m_3^K$^0MVr?m^Z2H1 z%&^v%8si;pD5O>=)pabjE2il=BCRPssG^z5K5h^mtMhn9&nuN7%lKAZ!dh#eq%Xy@ zwX2m4S4F^5Q^s_-5o^{MJ0esUbAq1R*{Gb^u8T)!c>);VMm|iJ%!q!0J>zr-EJ#Xd zrUv1Rk5U#z4-%s>hm?wnu`;nsDc>lpW=IT_l9Y+Yk}OIBy2$CGCj^ZWVYjnjE6oo7 zCHkYOyHT26<%L{Kb{>vhS0?6SDMWYFf@lp5w8#uCkYRu>YLHHJNtEuS#8;HDDybNY zq!r@My4+EEu@3ZFj2`Qhr;>F^8HSkBvzY2)DuZSRtM3g;4LAuk0)LtND@Y(z!RgwOM15` zglmGLD47T*dSsGF$SRn5y+IKyL~qgy#AMYOkZjW-y`a+(pFydWYDEDV4Q6Z+vDpAM z3WAPE0R!)m1)fKQw~&@LQ50;rK_^&52|6TU-fGd=#DnKa0*{G7FQR4z6Em_QB1zCX zOk}e;2rajpc;2MLZiEOTH3VT^#9k}KO0W)c5rf5nMVn6V5(N=sv&lh(TAjfp3s#>L zRw+jSgUXMkD99VD(#0=wvkzT|`lOiE{ZQdZ66?!3W;xTPJ3?q`7 zMXMxW!9!{U0zDH9*r=0qi2k!m1_QFlyi=5T1jDVD1VPZ7BvGg*5+=M0%Y@j?1{*Qy ziHxl-`S^+Zh(hcllJqu$4ZKm5=u~0kv7T%0u?y!P+A}O_)x7pAc zNR64xPY)Qdt$6n%Qw%xE6$XsY1_Cr_X@$!T+8vDRVGg+<9M z8ZZnx4}ERm6&*6$jYPDIyrA=7QfCb!J;04*=XD;U#{k6u0e~ym%qD1oLaaJMFt2N} z8G^D6TM42zKmi(wUNoAKEY#WwPXK(0U@^qOB^xE3Uauo|MUMm>uh{fZlabi4$)M9o zl89kc1syW-*bF^@m4>iE6ozjNe-i2eWWhvRtAlB#kVc>aSXNjR0E%lwSh+^5C%g?h zLktOXy!ZMbxFKM+>8BjlfITJhJY#jTRgF_OWZtZgp z8ft|g{JOjKt-CaZnvUI5Y&P}R-xTh@L2s2ycMZRX*ay;F|bfHrA<1(aVg(af%oH0lib#7#p=E$!3nqF1E7oeN>G>&{?+I z6mkZc9sluHl$cuJ=lIgMN$6EJ{kZtR2$cN+x4st*Xly(*(7RsX@D_Z1t6X)~C z#^s_$v}i7xg4NAZ(7FXhlTGB9op70(#!csDa?823j8jet6r09P$Wp`96MqG|#GxyH z4Vsx>U@|{U2p96=QVP8EiA(n`+j^tew{ymswY9;iQ2}v?~t!J z(|5ubkJTOW`ChGU9G{BpKKIb_o!2ivv3&LFmAiJXcy+}%Kgz|S^Z=M@Q?O6n@{IA z&uK^h$d%1gMZG!oZS`IJAL_e~{Oa>|?>>*zpnFP!U02Umm!mJ#N6Gq;o5%N-cCnJ*y5V`O_AL(VOwrOt5nBol6Ba*hq`8!YU)mtosf(6%(` zl);!`rmPt`kxY@~j^JbfD zDK5TJ#{*8hVfmi>?pV3TC~a7_=iu_$dh@PbX8r8t2lp)7APJ4l=kB|2&+-itq|{xB zzig3h=Dc4ZzSHYk5=+-zyfCJ{T9zhSVhb-`r@fG6AZR(qODqE5Nk1RJL$G5G>H+7o z@Ln>IFaGmO*od`5(yLzM2#0JrK>2R#<??t!iq?|1jcIgLbx%&R{`%|-V74(e2yc0cCg?m8N(5zpS zgxpJ-4~Q|FQdNHExb(t}k8Z#H;^BW>{rY2%UW?B+blJ>?;uGgwviV>?(e*6Lt>`H} z?`^1y)}V(B-8Pd!y`<-wWvjdJoQoga{^-R-ckQPh`_0wGCk!TAmjPd}=w2hZ_D>jJgvB@owbKo51TUUm%>wqcBn9MyB4qkSWT$;GknuZ-%(%gHj!YrG!k zc)c|@#nR{pbvTmGI}GX{4Q*EKRxS_2O<=gye3f=>zVdBPHvAr6oPFFUZ<%I5H3mmn zIsP=KSzEwd)eVm_%wh%h)lc~2f58T_%WV~@3!H<`Q2 z0`?y!aTe+8tYr%TkP{tOaH--yDvsotq^5Ov}vd?oj&^-mSiEJC&axu-g49 z%ZBdNjPwpxj1iOHjSoS8ud-B3ht*2gz3>mt4=cVOcJ0f#8(}+Ot01eb4k^}+v*`vg z#6AQC=aJ$JGN!9`XA4O0jHGKInuWP={ ztD6>9Y%^_}(V`2Iomf3Aw)Xb6*44Cx&h=c-vEbs_%jTfn!k@Kquv@f&QopnXVO`U_ zJ2ne%SI1P3)`}(TdRI@a^W}8yhFOhvgwsb>Uu#;3bB~4X$rY*QDejuujv2}6%jYGQ zw`6NN)o*HJX0a>ex{EGqd?Id=BmKM8%hj7I5#z>{ROt|a@WWkafu336ux>ZN%#!IYzs}P#n z+&yDKu5Z!Q)};+NKl<&uTxjZrYoE>UR!rgOk{dehwLnuo(7tv?$La;MW_3GSe4Y_5 zmcD9Zc3P;V&F*x^Z6=+?e0iHc8kvF{7Djc`BVnhj*4x=Nd&PpfD!%AN^wvpy*Q9=B*iW<>y6ZdcY_87!LKrMN~%E~b6=O@=`lZyT^Jq9f+o z&eWcUmCLsI+x-Z4<~kKKLKbmqsB86kn^v_qx5;7IDOrK$RvMZww%`@7^zQ^(e`;)j zXeBy}=(KvH3;VWQaqu(ScXW2SY;ujT(ry|347m`*cs1fB0yMrQr`Ok5t~1BPH`PDg zxOhge)n^ZeeeE3!K6TE9Ln~*@a)uBlD-Fbqqh`rtLPpW*mEuN4z5Ux)^ta6Hm>vkW zwD$GySn>#3^g>Pe)UD;Yv2&cEBF8b_F8@8;W17{4>b}e4{OEt!Kfb>4-`J$z`L6oJ zdzE`^jLJ~4&)19IRp-JBSQ54yt{u(#gPo1)7>@V5vf=J(|ez0MK z-w!`@<9EK(*$F@Ln^H*e(UOBa&+`5(L-Rt`49#nQ={^?e-=Ge&e4XDZt}lgPf62jk z58C%XDgJNcJlvwHTXt$snUZ)F)fU-d;iDl8TxzdU>E^G?{t~$Rgx7 z7r)57d|{Zgx-EKw5S5ppKZJqYfs>2!DMI!khqt0ea(3s+e- zSZyxzy+VY zCRu?-%Qh!Z?$4Hvm&mm;g(HLSDGTQt6N8&BU1U*|nKm^%{G7{bk|p=eF1OoPTl4hTGh% zQd?%Q2u(|mym{9}_kFgc!MkgTt8(hL1v4wfHS2E41@p3bSZx7n0T~OaOw23x(8LQ& zjwbs+(mJ3X>Z2XLL_@UG*SA#sX3FX}d%G(`_}Rn!I==FJT@oZHt@R99Ez zDl2o9SAnyW$prcjl4Be@o946&!M3t+n@rgY{VyjH2bQcl zpDwhORjDI|OCzPz%A9IfWAD_;&g#B34ku0uqjqL{tsTQh|CT2)Trg60iQng_|0MdY*5JXH^ zl=MX-(FlA$v0`~*%1rUoqX+(08(21LKQOpmrm*??7iKok{e3^U>(KsLb1J7zuRI*= zut&YkeTkAzTZOT-aapWx^NP4u7c$oBTWP&J+Pif@Z2Go6^yW9;-1Np9o8X83X{{Z} zdCM1^w_`z1!;H>D;V!-;QS7f|etCV@EwPrw(&j6c&)hMiKGEcH)NZJ|WKUPfQ@=jE zabs8Y@QwEB?k3w5e}yHio&urPU$d%y`sVsVddrqS{b|cP89gh;f>2WhR2f+<6M9t6 z62k#aek2Z~CWcxVYEi%-jdD0d$mFS>Fzewc{p9xR=ay)&?zLp@-XnYGmPi{|(syJi ziN_`;dF0ce{X3$S;V^J zc`2Xo1k11~M#8vrjIULGTs@7gl)0CtGI>1Bx1-0u zHya;GQFe@aGCJ6qEsVtp>ml(E2*fZ%8O3RtQb+8u5F+0@k4blvbrBnrS@8T|L! zl8Va8ijwpH90H5yUlS3B5?n>0pXdFB6mv0`1UP zGGk-&1FzCo4}0kMK~?*jHSM#`IAi#|^mCBkw0l~_8A-ndt_ELCnR1PLN{#EUV{!be ziQIrkQhz9jVFn^tGl?gb%!oP86oP>S8MBN!?`84B+a463Ka&IUgG!yAYky;R@6(4m zI}bhGyXLX!2lK2K`!)mNy4yg(%XESGocQ6(=Usb1X_FsPK;`OQbos03t{E+d@~j&d zt>1dy%P5aUBPQA3*|#yam1hh%E)Ils%5Y#Yn>p6Rkg#jkl4(L=8Ad2zGx{|xLqc2F z5XRWeV$S|Ou$gfC-ViJuq4sKvw9v%p897}*J5+Ywt|=-IdkYi_v&u<3gG#+YX^ZXZC0ecTV6HVqt)z<%v%W<}3D( zyCUl~2=ts}8#83tdW97awh!(*}%+omtQIP zPF&&>uEeNWU<;V@)m4C;nGG`(%tygqd%4zO7x%Gq8|EG=>X_TGT`OJj0@>`6u1kqS ze=aP156FIsA9B@K;$zuyLE^bG=kc+?dp9?9MZ}vMz`g>vfses$O!D&24)(t=tEy*3 zXY-bzOn&)ifdA~bqX1zh!zB1%KL()(GWcK;CW8@;ZR_$&kt;)W5PyYJpf!L~<1`=< znO-KoEdKlUzMeCD-h#5|yxBJcCqg{Kj$?Hj0}%Z^rdJF^GLR8$w(6ySjm8s2^v771RcNu zH@kRM`a?}2qcj+pXT?57&TDw~cZ^jJW(s!p0dR$!5$NZQ)}ixlkS);DMeBh|XQgYk zyv-n2ij`~NDBg3DL|Ki+9`u+Z;|Z82Jw}Y%zOf`7rNHFLpcQgdO_3DV*dtOzYdz`S zoN6fTli_P7J%cFANWVIagPJZoUH888LC9C;j_yy?}Og4Mx!>*jfyXpf*# zsVkS(wVhMSnHZIUS1~58boXVu$u4goyXUmkEv;0mGy*86M!=%~x&mkh@9}^%RZ>=h z-J_pLAMd^Crd}+00Xji3yNXEiAOGJ`?pS2oPbPlv-wLBql)fZ?)^>;8HO z!q?Y8xCRTQOwRTsr>sbVilb$lN3u70CMc9Vxp?u$vE(bn!a*a+7TYGoBxZq36OAuS zp)ydQRD2UsqXwy(A_k>QIy@I7vAF{b0Cx_PHhm_#eo>ly^8v|}fz3}E9hwh%a&jf% zmeW&3)Jn3ZBq8jQeH904W}-ig5*v3UCJ{Cpu@_(tg9ERgNe~(Na@jxZa~~y32M7lR zyRfAi=c{V%?15=pFFkbW)@g0ZVr5eEp(cs8ZOM)0^$kpg%~q~y4jVhVJB;CGO}Wih z!8FvDZ(Mfm6aV$ZwaaLtoeo!_r@7};&%9uMdHMVcX0D&FDpTEj?X@?f&HVMZZmXQL zqpBbla5w_hg%)eLs;s)YtSW4^6jtM7v4W}{b1Jvpy7qx>Q>SiwfQJU}_ zsQpaht0XQZ`aJy0;Al|11e>NgF(7EvYVnr}1xOG|${tL*NYE@#3=lNo9to`y^q^9p z|4MWnW_CB_hBMJ_7t{vmg2R86OWC(R>%4XTAZm3f&xMIHyVxFqO$wOY%I zq>e$4Abx(5Oj7wg>>Ra}>KV0qu{nPhI*xiNQJhEs2sjGV9Y+lS_uedOT8IosWA=lg zYV4=#WOB|gk~y3SO0F%cKwWQ}xo&#@K>v(d+W|2BfUWO{yQZVYJ*RgL*-onmfKkfZ zdg}rzF_m$3`6Ds&?>YC-p>x~z9@()%SKao4ab06ae}6~gI^zpXuHIf(Q{qV9vceMF zxl0O{VQh}ky|&$6FeQeWs`J!YKN8_GZIZ}OyaJiAAE51fbs2X2z-arkEA$WJd0>J5A$fp?}V6# z?3%ZY2gt$8O>3G^)nqtDCEGJz%?2d@F?JM&9j%=rId`!PR(mAtH6{)a^hjo4m`X}+ zVvstpGJy^+1^XOG$}0bNR1vf*wS&luCio*M4{Es`|A%z=WQqM;;yii~(Fw27A$szIkX@d z95_MIJz2w=c3{*3Izo-6am0BJCx4>7?IG$H)GO5c)R#zt(g7DJ2aOZ?v7_Vm*>U@U zN%*i&bw2R_v-?kX{rK`?$3>af@L&H2FBJcE%AB3J4uhKxN&;M-%QV(No}$k@ zLH&vP`u~0}`QNnCobO6rd$oZquYoT*)+4JCL`)NL^dp|!3g-Vv>;As2Zv?M|(Kv|H zQY$2<^750+JTKceK?04Em~SWX|5+P7O^X`7j!C-lfbAYil6FO>q>T3Tbopra z0pt#GFo=YXM2;^V+ov0-wPP*R1S&Qw&I#o6eotT-7J9$Mi- z?$>H%`WV@#-4mXJlQ4|UKUwQG_In+$C(zS~Pk%6r!6D(}hp0-_7u%&s)6*9Hdr5_4 z^)yKl(~`89B+?I)8cGd}N{eoE5DZLSnlDZ%L}qbJ2>v{_RLC@d^GPCjDIJX%e4H)ye(Rjpyjz;UDhBpyBnDDFZg(=3O1j-W zDZEdFp=ltHzzi3x9l(Se{X^?8t-=ik2Hh#Q+?uq?(RL6FxD|LMm~hwmXe{R?GCn#o z)C!4p0*kpOPc%;IGZgp4JxEN#xZbm)44N2{$)g`6++fg6r`!n~lQKd@XN!qcD)qrp zfDO4R_we8tZdS~&GD^!j&NozoQ6X516HthVucJtf^5eoRLu-m2xEmYIA8QJNV4S{ zow*fxbrXo@jUiao_#F`uWC>#1PY=4?5*fSOohDFHG92*crin~3O#G+kVmG}&XQKv> zA=-wH;Hb-9o)3tQMD^pbZLFoi2lBA*a9*(pn2{MHY*jTH0gVwbkaGlV85$5Y40-)f z3M)bfBzUUcM!b1n?>W zj-p18R7a6AqTdv*f&nmPPPIr$+K1{nt0jCXQU#K}pPuV>yNAgI4F1iZe^e+x6qRAb zZ32>UGRG!;eUAM0@Zkycx6D8uIquVw;bCOvbPr(}8ZA!~tOr>_$0mLn`a3`p=ldilm{dA3KF5IM_$0?Ef@hl;Nf3RZf-(^FINbm0Gw~Rb zV_H=%sxljaVU*ObqcItiUm*(FyV_;ufGe4+T?lC&-v($iPr2hN^N{{!FJo&JGzQVQD;w@Y^(80#~l zl6+0GtyDH1xh3QOnb#P{@ZE8Bzz@a0a$dW_VALsmvbOm8fnAGYE;Wv8CYRwKj3g_b zc}Wh>mLmPGl3I#q0xj@{K{a9X%S&4%^et~l@*#E7m==u|jGUJ7dBaR7YZ;UD=2)#x zl)o@(Yh2i9!$0umT=Jm7aYlvF7k4UH5fea(GQ*urYY)b-z5aa$fS@ zLzne=nl5uhw%on>y1TAFu<7p25yxeqw_{;j+rqIw7o2mSNu@H~ch1uNv&*&G^4a@= z{FMvl_BZ$xGNHI>-PH46{rqUx(w!UTFZ8*)=55%yq;p_wzp~)3kQw)IuQ}!DE3q=6 zrFc3qYJSG#v=fM$1|d0@$U!f{kH<4NNqm{RSj?9h!ckQK)BhECS%C2E+!{R%ohg*kI zxqPFQT`IQRtb?n3r7rOXtKL`U0-Mc`4U87$0Z<>E_JgK6@rLNM(ZZ}8s0_QQG5)+p zs(|uS)r8H6m{5ZRlEsO}q<9l>g7M&ols*jITBvtIH1hNLWawuFo)@1F$gOr;h1_=O zeV5wgQ>v_@Qu3vlE&0;S-tfTZ;_&AWY(QJUeEz^k;|bkgI`{hP&qWVFkLg&uw!?1K zSAbXgq`OJi7x8TyMjwNQ>v8>d^0Ju;+@WOe#~v5ByZi@blUu8%WJ*l3tYZ8> zD_g`?q0bgejvj-G3Kjp`vZ+XXLn*fMXZ;Xy6Z`%}N(Sv|vfhMAyBPe>N+KBr!Q=l? z<}-30+DNlZ>-W=;Fys8Y{Cdjg4f$jeOope5PVm|kuT5%sDJmqJgo#XHG8^%YH&Tb+ zJ)C+&d;^rdK_}k;sR{SscG_OCP9wkIjD@pwU5 z?Kwkd`U;7?tI&tq7Mt=Zxj){xbb3KzdVk#p@$1z(Uaxn%d`qspyS@Kc{lUn2$IS|t z%LV=pdsnzC;}@py-=+)L99lEI%~xj_(h~dIKMi%*sJ$!AhIp3Q>C<|g1xxD`av=ae z@)=E~jlrh4(646oyb;GoWy{W@7F@HTp;CdW!$b;YF`;sy zlc=mF^Z%=Ap%ah4@Y16XzVR0Q$=`1<3T%z0N(kG_d}U^fUD)vWX2DoedCsx>50-nb zAA0bARaelO(yxE22R!_&{OqT0?p`{j17YgU|8)*vk5m%rfpNgY2xLKMct&)FkqLIfLBgh zfP<53q8QJKuhGp0#-d?WQX<_udErKV<6opq79V5_WWN+*U zK26+?BLU{t-MD8@joJX@c5ux-Gv;fC#$6|#DEQ?uBCC#kH*!pNDLY6hsUlQ{a#Z)U z!NSrZ1rP|%ZGiAAVRoe$CRaidxWGCAa~A;OZ7t5D^`NOi4Zap{Sj?I&28-A%HlvN1 zT`XSj=F7pqKQI;+m_7jiF6UwEiE3p7Xc=yF-3QjTfT(zfsP+WZpM9ndcrY)MJI-NR zred+Sor@EU;`B(8-A{assZmgWj~9dD0SO<3JvW^+6tPOPBb_q)l)RCpGok}bG0Z{wb1;|?m~Zm&;uj7eK@b7qOA~t4 zV%W_CJ_Ac6e({wFWohx*6_xkMd&ay>TEBLqjxtPin+=k0=NRiZ9?`V< zM~Sn0211+6ry$OIumfw#iX<8<`2h{C(2TNBaUAXGO#9~5SFLKCTI!pr;nkYEHLQF9 zOzF65Ul*`uZ?M9dvF`c?huN~wW^e_B@&(uV9CZ~Xi9*|Qy?l?-sR7ES-W#*)ZHW7{ z6Z3ZEBZNqlz}d;ng!?T$euhg*df=cvk;u|+qeN2T#E}5oa_}G^nK6!~Q$c0}F)m2~ z!jL)x{kU@6C*xis(9)VZLz}DFSa1Y{>_=l0D$%Qllj>DrC z#ft1^%8T_~0h14-Aowt}k|!DwXkXMrfFUBWX6P~bXaSf!#G#nUexZ=Wq(fqLB2oIH zZ;x8#G_6qTZWYDkvrioa#>=4z9iip6D*)K@6|$I@xAvBmnhUGqxHnSzz6jAeaHkAYK6Mw!~4Xq#kb+TFFOkOL|uPbfvbV%)u#r|XTK2)aZ-=|FM$;(84&oX_M78!bMnL4(db=kDF z>t->hDbhPHJIcYt618k3WAV}setSwD~jx;4c zEc;rgvJEGLb!jTttVd}YrD>EV_=8N;JG)?*Dl7J)ErYg_j_+MEe)i_#nSIz@k~4WZ zEtF8Pb1~VNOehm8PyxIlZ`6RXL$Gj*Lv^!(+=Pw^lhc^6#t>tWNTfq(QLt=&aeH}N z;4C*VtGpNXh8q|9ihWx;7oP15IKzRC)khQog$6(fT><*Y>W)Ad9Y1?f#};(e!p6kM z6@X=d)mK(-uC44S?OFkT+KEqH5V|SEB2hybtqru5w-?V}wxX-Fqq5dqUgonx20{QB zYTT`voYY30&ZO}y;3l(x+sq`zcitiJ zj2RsRpxzPR!72j+K8X?|)N%3KF*-)^o;|r$~M$lxNRbA{yztluG7xvK7xuUw8b#hI`=r^&7WJ1&BhYcw_RwaiJ%Y zDTsYcQ8jI%65VOXkHA~>1YE+ibH33MHDrWW77|AMY|J13KI_V%s|_TRr)8VEBo z5|zWv@Zs^$;xTvv<2)WF?vINS$_RJ46sl1)nVdk~Z`9e7&U5_4WFRL9n`5%O1vB(X z8*~IoY$@O-;37n(%S+E2B4#NTM-LHZKIwN3883#2Px&B{_2!KFlm{|!mpI_wV;bvB z8;|0E`b@XRv1mD`Xb(CWATT;m@+PN$sFtf4T1=?4Bh=PwrO9s3T6cZ_j7B44DAH>z z1~n_xOx;vt>psw}1!1iUq-X}+#Y*42M@;Dz9O!|(YJ=tB9m8a5qTPM>JGWNU&+^E9 zoVv=YbkCkTjV~#~rSiB`JnR9S0=Eh4h+8JvBFppGZH-uBrDYr|AseCPMJ|Q&ACLL5 z!D)a9r@(sSBc0ogP%9=mg<6%+u#3e17C)n9T1CR39#rbV`8^%S!9u`ljf^Cvg5-DN z4Ucy8h!^XXgNy=yG$XJr0*ZuS1W7G4Ztwj0RYH#Y=p$*30cej93!%n>wjT6HdkF5g z?6teaM;_4>IBM>HQGDb@@h|xIW@dQ(PwE>=;82>S6E$wn@C^DX{0C-qwzvOctnUjR zaHv2$R*hCwSqy&}i9pFW@6cCn5Crih5D|n8cokPC2;etDHN0e;Ci6;s7DUi>)dIew zPP!PrbyD1U>HX-{p$t&JMUer;&woFB3B68w9C|E>h%b?h(9_4iALj~ZP0Hp==sJAI z>D~|Gv228kL=B)A_kQNeywV7xg#_a(07x}3KC|GhiTL)D)B&k}MYbZwe}nP~<&r+a zcy;pUq!Pw|Ft~e?I!KUs5d&#qan!OfRF6+!Bhi512>}ny2ADqm@D&wso%z{kG!L0U z9|Ja4r7zHlHEc4O{;%|}=m#E3fBIoGdWHDuIgs#%y?T`bN+*qie%*>aMtCWa)_>sLH643EPT%GI0XdL9*SKfJI=x`z zrT$Ok2Hyn!G3>*M8ck-Q6P4J28TTmRnL8sHWT?TzZCKK} zo=7XB2*5$NOmB8mdMfjGGCPO_?F-DAcqed%NR<9W<^SMm3?cAS3Ci~j(DVVmA1=(@ zT9)2>T5Ar`p&*exNoR4!Cae(I)A>&)Yl=ucrLfoMxY=d|W12NlJZ)||f!Cif(^A;KL2i0l!BVc^H?7UZ~@;iVH3IU%9s zCJcV05uf~6YcyzXc~=E^O;Te77qT0E@`?DtEn0<=*SrW;zQ&OgN)>SBdqYZ5{N9hj zObsxi^E^$v`}bBKO;T^Ho-nLAY)FJ^bs^}_wh0M^5I>9&4Il&{R1_7 z0s;DRw6h2A>fxOMbkjgTx^8oTJ`_MVp`AT}&133C zTI-JwQ=Y_sRdSN0laqR^N-Bl19;);hF4c-jGzzEj<-$tIVWQ=sC4{?CC$3~Z*D4&$ z>FC8OLd7awN$<<2U8TUt5Nhmd_Cl%v`&O5NQ4n|R0qz^69i~t4MJXI;Ws=L)0}4Gz zq>6Zh9VGZB^vNCcJprsG<&C7h-nrL z9wH&e+}PzSRpfVwDfCb=WjCN#iYcvXK%-Ewl%O5HbCz2~&jm?WFaVRPl-4MWl?D8H zvH%E;$^sL*;W4-&GrO1nJ|hlbnP@})SNt4q$jAcd8tLL&1p1Qv?>Rc|%h1Sf%6wA` zhaJ%gqyniw1#JKsk|*6nzqspfs;=n)uWJqBdj^fx0DJ~<2)f0=^dOyFSx|6OK}W$# zI4}kZ$D}u=(jvrHX*&Yj}rR6B^g-djMKQgo+FCb)@FdbpmUECHXlS%|`&oM=P>} zP9gAWSxH3^kA)z{Ad~hcK(T!edeBE1aE6L@|7!mkH6G=?N*yON(`9|(`>rTbtL-p2 zrn(+Q*Q1f32b)L+Ld~mt&RgH``1@*FVFhb;S62*_7+9DZQ(2?qKSW=ar<}xw0t~=_ zCU21OHXK9Gg@ZS6pp8h;?mV}`2~LL~l}v*9>A#FnXhr@WaZHr1hO5U-$)g-j80D%w zgV7;%8dMGAM~d;a#GK1p#FWq?h$#ziD1ynNn=-zg8k)c-}M zj3el{@oQY3q~RhnNSr=ThN5(`$iQ3BEYTu>gk{&s^8|k2^Z8sL<#31zm-xr;pC{s* zEZKZx7I4};CGhio(!2hYZ~q+ExbMuXN&~Lj^k*~~iOC)G%lUaC@+bXol&2mvB3aBb z9nf+7xI2rfl1G>8jbpIN7W`wUn65#mVtnMPta`B2(?pq?RG8yI-o4* z{hFiLBnxPUreU&Qt=4Y02inwXUB61V>mbdb8v$fFF0&q|hf#erk9yLM)#OXaF4*{o zL$)vvnZ){>4HY(IH97P!s`551FKEtKjZ3=vn_oP21T7IZDl{4;Thdd$s25a{;IUW0 z9lZ7~^dYYnufL4{IcD_ne4{Jr|oX*pp?71YL~vt#l|X$Huvwt_kykXNr+w*~D-{^y|Mp%4;vx z2rcJ#wAomLZX>7HDd4t!fk5Z^&Ok?XEL1+PqNO-&Gdy#U<2tXFn|SdP?*%-gsCCXeG`23N4G<>}4T`PvDJ~ieS^!rI~Mr zd6b*7GPo9S<_wE+hzjK#hT}N_CYY7Ov*F*Rz-+h#oxX~+T5RkSK6YYfLXkD zqefW7YkM^UY|-oWytpK|#Jbb~?iTb~L;7h!)2rnd37U;sUi_&>kZfM8wC<=OYjxc4 zF^5ck&T@@$wCm(j(x}D=`}%MsS0C7#eolN4d`A?PoS?ZkYnIO1s-fdKdgF5!hzW3~ zxc7g~9`C${4%~q9zDvvJ@iNINHIjC0XtX^GwG6>0n2na|m=O0^JduzOA3%#B>43CG zq)CgReYC`~P3LkuIv@8S{0Y|R{s~9j2AsKy zwI9?gmF$YG_>ybAkD@VS5hz8=X9hE$J(x@;(`YFzzKM3wp<~IU8@1B(O;#)HMZa1l z>?N|cq*(?_bsDu*yb1JLrC+s1C*GI20IzRrMkwZMRF4sACczmpV?r1$!Nl-baj~V65!FQCK=vAQv=#*k}+5FH|*M};Ue>P zUf6X@N69VxOyN1#)+)JPrqs;Y`bNTYOIOh?^Uv#Te9c)lqhV>)e7U?X*j70;TTj3XWVpW6SgkGcz&-hN%(oL))VnqlrjLsm(cVe*IHa*2@8YZNn~Oqv0dN7N^ydD zQ!+!DwcsYLHho`B5p?HZA>3#=__kIn_G-=UqMD(>EXsq#bCP>*5$ZQHah+N`1`M`8 zHZI#}7ES|SK7OA)j^0^h*0$wmrRKTG;3vkX8Nb$yvz&frG`AS1D(%j#&46~YB$hwz zs7!lg82#N(wNPECL=jAxtkmN0Xz`c}CsctF$zQus`?Y7V((t;hmTJeiae-5O;;|Y7`aj%< zgOeATap!9m@KQfX8gi2Ch!O!sitLO~WC#8BOjhbVNc?}ECMivK+4Ac~%Rj!9fm3|? zaT=7<>@#BuAi5{74LC5a%wuX}w4U6#qHLe6D!}&BR{&}A?8})p--^9}1H{NrEcYjG z^8urlCM+0nNe+$sFkfRP(g}9}3|fF>1nh8ud0N<(rS;WK?QK=l(|4St&|lbVI(AKK z3S0S*P9F#^T(5_w&a%Est~vAkyPaa`y#R7@zNss9{`<{+v$oHPEuO5*@uuBpc2(-- z+%}HU>{?89nUE>{pi@Hpc7ySd1)a=FEg+O~zq7 zWD9a#+1Y1?`SNz+n##1nnZR@dCF!$PC1Fbl70fg%ov( zi~Vy9Ew?S1d%n*e^xLexm2Dp0u268Q0;6CLw^w*{3LpqPt(7ytG;cex+Ms7bM=ods z{Vr}UbI)l2H$ce0tZA$b^iP`uT@HIG00BF^$QFQbdt!-)ZwQox${LJ<$yHU<;Iszk zlzC-Vqjo!$j8+paZQWr3o(L94T&sLEv$j16U>l0XCRS(4ZeVZa72 zvIhVtwL4sJ&b0nOEvmRVZj3yi)nzD%9jTORM76Pwx{$hpx`TRz`W4}O!QSv#OBTU! zY5^oLqJL2q{bh`Jk&OD@z-D}e&?Q)W#99WEG0UEV21MfcS_ph5Bf7deR*kuya9~Ci zs3vrM9ydWG%>Z7yNjpR0Js0v308CQ^6TlK*EhH{UiaQLxVaVjem&wNj1>TK?2EE=; z_+(2<`q_?I^T1D9LjjLM)&hXmXa>!ky4dGwZFT#L)!Y!I)sAR&p~+ad!C|`CYn1`< zqC^6k1Z7L&>5(w*7nF>7}e3P%>`Q-L0{hA1{hp zN0fZLK-5PXOe2U)_^@%z{NqKtRfHLsletL~!7$;dRk%qD0TCKK9RnsuglyZB+8J(p zfk|2@{X)oMHd{iVYx(lwy3OKqo7MsMvSm&OPlIK0b$Ch)98(x#Ri(?8l~0Ko6rgJb z8rH&(Izp{&p@PEDw3%q30@DMF7sFTV+NE_*rtMGGEz{Uhy8a3H5lIi*H=MgpTM;Pe zn*n}W5SZ2)EGP)JP74%(`75GTVU2tRpm~QA_&$V{j1lfO?!QMdda6d z>pNs7ldPk@{|lVvj7AQn8LhZY{0Gp@I<#@2_}%n}I?>(1j)yw%L%KvwyeVLffJ5T7 z9%wEFd$K-6m$3h)1RU`XWYP*cE>wlG3udepHf5DEAO`S3xJdbpBlxAss7wQJr&^`3 zd|70tpI52UUx5ylQfdCO#3~-+A+Ux1VW!vf;;gV2a}}UZsMD2$b$ZkAa*)2+Xwa3z zv)uGm<)gd{cx(~~PaZ}##rhs>K`_xW3--c_19AkI0ojX%020G36O1o=O|B<-IVa!q zj6xyTKjjkWIA{2|QxMmq<+joNB+tne;xM>b{--fYY8t%fRjCbc1M!Dit;SDxs(tAY z6g@t)zy|LE_B#xxE+%vU(o!n-VuWO%r z&z7;fl!RX;ORM!UHCl9kA^u1-vt^u|+u~ov zSAkair}z)?m!Oc|EB;daCzwKT?IQ#_oQoLy&=mjsOpI8KEev+PHhfn3%VoVuqISP#= z*tr$clcVv+myrvooa8tf#wqy*#>Y!jU6&e@@9uk6{MdM<&(4(F{Njg?Cog>b@e7mS zwW7iw7Z#D9AMflOI@GyyXD4%Z=gza>WzB7S-@E|mQf7Jc=X$c9{Tnnc-=h( z#l;2ppqoA)y?ke0f6)=ljPZUbkz5pMHu8f|D@iRF+;YLg7hLc#e3)$5F?>P8_u*ri z|M~qAqFDj+jtd?(q5zS&XN(IJ^*iw_80!|JVzj##D#6fr)Pcj|%Y*RI^xOeZIa#dl zeD)&tIV7j!NX1raBi6CVLO5n8hB`|a_aoG0Q1=m#B<5$4^obpkkrXD7xB?`b(P&<1 z21tx>0+}Eq7zP1!n89Z-|3uu+VxJ1SLcS{+Dl7>4+v8iczgg2fn`W+Cx#GMJjWf$C z#rMR|OT!7?xia4H;k(Vzm5b#%O__i3E6;8W&*(}RZEhL=K8z2VWctVLi`cSK&#-vQ zw}*8m4a-4=&tzB7h29#!bI);bJ}ADmK@Z?P&2!v_t}X+wt~YGnURH4Kv=vFY{3dvw z!>5o}RB}qMy}+m73Jc_N-!N}q-`Z}RQb8N!MsL*D^Ne0`{q-_$4gKW3qSaYlVAvaU z^s5Vt9o34e=gxm{roG(h)TzRJU`cq6v58=+O5aLOM$tO7)+KD(K|*~Ti<8iB680|O z`oU5y7V43tD^$mVAv93w0O3r;6&u6c1gwmc>e@-8;|yK{@Dl{CjxK*GC=D%~C0}}= zkB0H`=~w^M*cvLk_5QM8t4R~~I)C%J$6r;WVs&?ly?3cuyRPE)?;iC!b(bm(rTuS< z|2WVcER8U7vtI_}GG4RkQ9wU#b-9=+plFPh?3U87*|>?f#2Q=9Qm<^STxxW6fjX02 z#u|+>&Sn&>91_@B&X%URkd5i2!qG3RC;wZ=>e8r`e(Q>WovIZC5<+XRD1~ zRfn-)g~k{(0TrkkH@*X^ZDcQltJRC`YZAj*mg<;g-iDE|y4z+S5XyJD?feALo{-&~ef3-~szzB6*4p>`secQg$ zCAY4fb}6_kzy4-FVFs3>VhgzHS75rbY;o^m+dX1;?ascb5KLhz#@HB=Q?RCbJj zW1f7e48PWE#JiLltx~*QBUczR*n4O(q!*J)B}nQ8fg!elA<0)`XoR9!Hie&=@dwF4 z5XUp|Rxq7=j!CZp-T3KXt%ebVA>tU#3+WFcu&QZ!TI}P*hcn z%uh^a%SyAD)VL*BND`dbh?kLM(HWt=8`L-wxH`g$~v0x`{=kO4GK>nJbafD!mXC71!eB-kWAOpjD$kp($a zC=kTs4kyFocN5(Jf=DoKqJz~~DFH%Q{eVtl`I5|Z!B|F3fd_ds>c`Qt8y%KejJ_~x z#^`KNhWUi>ii;zGMV2bFj0A#`DVD}#KaHmZAn}EuSt2OS2x$7mK^a=C3Bh765?aZS zXvUY|@1O%RNwOt3JE19tCKxncp_@reJboCli^lL26lp?oJkF2FY^ma8Xi14n#7Hw$ zs2WZAG7`XLYzEbMDd^LpWe9qu89$&Z2AmLQ1`v=Fn!o^|K{6y&1b#lQ0wQonNe0o= zoHS>|&%_zT+AN~u3gVMQyM;;}muANZfra5R*P8K5X!2N8L%32i56;xHlZ7{`6bvh{ zD;b^ADyPL;8HS~4j*~G420#cPy(rEgF&2rl3ZR_jvwD_zR3VoRs1zn%qXAm4&CD=H zRY+GalgrGuK!H-lBbmZrGwV0=Kv8U?fw#a>2!X=DDP@d`GXP+;8jJv#74i_!uu832 z=`dHsVTr@dDpV}3P#fD7Wp-N(O$vHji6Q9qILsOdWil0~p$q26%%&1E4V;A<-ZEbf zflO|4Gf>8`j6cj4F~<88dfMfbmuSNwMk52XQ5inx;xda$4bdxQCfWj_0h)Dw&^j-D zC#{kxAg!cn6%Bp>6$TlrU}ccjmhcMIV@frxl6x>hCm4!My{0uy%xre zX2@AB0ees$TwP$;5acaNud{5iFvnOn!yhRqygMNz{H0b_=>-4{-%9ObgVSn?x+7kN zhKFjF0bZK+8ZYu$*G;vQmeRaYdG3_9autIHKHka61LmOdEUlV>)g7U!(LR6eG#1GS zYvapwNYqd%9gdinckl`=GzWRTQBc+_FRE{Bk4{mA+#V0D1zMe5?_kyg0mx8MfR0va zWMUVP8(3DZgg~#P<@j?$@fO~yvpMvIN-tN+PC3hHY`$w}5oF5G3x^t9yc#rhIsInS zRIi+N0#H>A=oXuxG-Tp<>xos#!DCu87m2(q-e!u^gtQ z+(?EFQ&m(GwHSNq1cI~=8`3dX7aa^S9y~)^BA>^;+L0#wlcxzpPkqNPsd zdE?e#etf6QG;?(%YX zL;1@6f$6)hIr>3|e(TeKy}EsF?>=cq9Kt(9msK{hhxvfShcr`dB#J3(V~7)+?tj`2iO8ry2j#?0iVU``O@s9ts2H<690%bykI%+ z{YW>riIK_7jw+A%4~;@DcAMMP@i|@eIja-qJD8@q%)DP&yk6tbqv!=ac3q)vU!w`# zTT&Qse9Z2$Li=Z{^fxQ-jAoj3dOcw zA}@o%j1@GuHxRU+AZ890{iYaVLmj3F2|6U!QDP&dwWAjWbDV-K#SRi4Mai-gqJ1X8 zOnigJkepPY4*@KF2%KuszDXP%} zs(m9!ZfpmXUhLWbv;F&j1_q02O2MK7;(8r#4~k!fTUx?EAGGs2aO(l_fzq0yLMupa z-Yh1qbPv8^zm!)7=QTjQTQh>L?<8BP&T=?sR82=sqGe?Z`9tac4w&rd7Y9jh=!7Wo z&GiiTlbpONPQhFH8j)b-fq{zkjxdFu*k1GX}H@m-BhE57@f(ye?ShEmJD>psI(}8Pwl?tI?ygph`NcR!e8am(f|h z=G$-8nRVYU*^4M1wNNU6$2B~x$;b#8sqzO1yDQyBpue{-3E_bgs<_{8;RpH=MAa-X2m#D1E(r$PMj zTl+qLV8i*pe&Ju|y$lL&yBSzs+#`d<#jbg;?705K;Rx^27D*UkvQ)-ST$=F;B#KVY z1mE}x@gj*lL<+bezXzi;C&(EY=9BuN1fxd{6SNFs*#tiv#j+q+819h)Sr40{TCj%| zMR*c8i`ht;0U8%kxA2BxMV7*_8Dz*4>VYAI`-h7l?PP#4)lm~mv=DyvQD+tPbwgN$Z$C4g6(SynGMR_pYIvC^Uf4V3W; zB@4Bj%+{dc4W{VNx}ru0lJAjBFEeQ6ytkw&&``l3sT|6TO5hGv$>?trAGxFJT*XDE zMwE&D%UNB}X=7NUT5Vc9twIi1t8ZGV&L(38nkk;zYPBkht{MQcEA?hpCLno}p;e}; z%>{)GODhXlAothxwimT%)LsQN3o1JVYS!TL)KxDFs+znNE(K)lr7N0x&sFMZ8leA> z)hQ(2-5+s!c0Hveqh1BIh}uM5hB|7{8HmS}tnfbQP zopOanTgVxlTIb{Cf7!aZv!dd)zOAd#Dsey@IsCr(C#_-tfWz;D00_>y=9gkx{7C$t zH}_qhydNx^HMN|PX>~H$<$nm5mqS*oRM)O-+quvt$V)9KW5%V;))I!bTN}WlC6SP# zDrT1#_?wy@Tv9Ma?J79`pTpkiI<4K~o#uAjs&TNaO5@V9s_qRve(zJOSFLmuKHkuC z{dBG6^TX2SsGYI~;bt%F*>$+q5VzbJbMH?6dRbi|v$x5-|5V;fh6TZ70@wLJkug z`+=TAgQdaD@XVPHJp0T8hkot#{aU;={o>>I0zVUd{KfR6z<;l|yL-vE*Ie^0+bBAQ z#WU8v1*|^@)Bcby5kG!wEjT(1{^tCH`11^IGR2;UWVOv$_d;WFRYq|HJp+x$T8PaD z0ClezPO~`8xOaiM_(1}cHtN( z-Qb_uy>!ju1)lBCUAn#57PWKc8Evb(7AMMO(=S}JxG~}}vy58qm{C)$4My6}Z1A%( zBQNLB8cACbTe|w9HW+H0w`k#A@RN?6jc!`&v?-Mzir)cy&<5T- zuI1&LvRQi}X-zRJ=)fs6JDABLXvQp~61%B5a?0FJkl`hr>1Z~==^~n_ zpxtPY!nq7a9GiNIz^@ecSyE@hvDCrg-+YfaD-QL2*Jyk@e-iZlOgMYVsWA96QR~2c zN+|w}@AxVtmz$^2HaD7-`oWqbt9BUUu5`FEV2gZ9w^r?j>C$)r!LorEJN z77Ehn^Ksa0EvYrJa?~QlJYlEnM3IWJ-O~BA>A;mpXx0mXGgbjd<_eRoR4S(*Wat zVGr8Tm}*}J$=Q?%-;oNF8;o*RvF{mYElLcL;s99y_eilFJ*SPjo^U;R(y5}bGx4T! zjH@3a9u6In^(`tbgu_6h2*$qasI_>A1e0-HiKEHQf+J`>GR}(xRGYa3cbfAh|l zwf&9)anQc3yk}M6?Y9@M>IpBk12?0ssA~6v=Y|zK!9XHW;j!AF!D@gutEVE7;LNlx zQsys<=x8%H?C#FBy%;X6i^}`Ul47=pufNsj)L&cH5@g?B<59c-iey=|l{~V)8}!;^HzB9Xfd%f-Ts_UmN z-RbVsbt*_8)DT@X(R=S0!_nNq2GeX~Bik7FhH=5hj$GroJ2=Jpxsb$8;uiM;=!W0S z?nwwtzIOiK|4(qc)3(g)l=tSn_jz&Y2y&O$L5sO^bUeRjZVxGv$h$QmX|Kp1rir5$ zN~P%ZTu?Fp!u^_T!B5)-IwC-qaSC4sGH&5RnI7BUfipN1l1Me12vmc?N+k42x5xWp zY+7C2w1VFhDs$weVLBNuO=S1=hD)mgg^z}4huXngj0U5H#~~Uhd^P9mnw&Waj`|Fy z4gMiRvesrvgHqH&923mUE-wuS+O1j3Y>=1fFvr2l@rj2InA@p-S)!oR&*I+PM2(=P zQcEd{$17M63P_W*Ap8kx#C;9IJ@Erc-k>i|9NwEn(@9M2v%JYHtbzF3LXMBeN~kOb zFV&EM*97r$6Q{ELaU2g4e;PP$+E@=3zwmEX%4(!`rUiXkki)Ba{`KJ-l{yKnQFg4k z3;ipT#%0Opf{`y>4-|9diDrgTO7yrl*C5FkfZ4EV$z1x9DQ`XaSw-J%U;$|PYR8VR z&{4D-9VHajGiYUn7Vy$A3p`G08&0w>F83OrRZ{+g&rr60~t{2 zc{PxtCyhD81{N9}n5?3!c1o|36%82dY8qmW^z5-sf50 zue&Yya8go1s)$(h8-1BB?27@9pffh`JBP`}_6MVMFWsBUcAS13%$_ghDA1S>r5~#t%OC6Jb7yceqr)-{q7{v&bk_n|+cL+Fq9F?v{SDlst~rZYW^l1Z<~EtS-imqWQs z)2ormVR?D2Vk~;ZWMaB;Hq#A{qZfv(8iN0W%11d4Y73+Y^M-GDZ<^^JHYAAJ)e8Kl z1`h{^3=6(_$sB2c6m$cCdT{+0o=vgWi#jcUCqfE7NI@dgz-*S@TumoPu$TbF(GyhF zx!Flo7@d7+Qh6k|p=SHDIf0#BYYOAB(sD=A*CyWu>(f;V1$=%8coBrJ)@T-gf#0m^ zlj~m}t5%1mmtUs)iG0JwXH(2h3Bl+nBABOvk^%`4*{W&cx`k}|(Ij28}{J~LWAe?nrV zw|ZVOXN0Z5kXtprBrw7nTLNyqa_jJx;>IDx$*u{>;wJQ2&(@F2{o|Xr09}^bSYX=y z>d=~&cV4s>`3ubj$|4BW{?bVmr4uW%b+(ep^!|!%mv)9c6*CKF&+aVo*h}HiaW&U; z4PD+;k@Wh9)OV!XCUmY_KC-)F=!mNdI`!GL+2MTV+1;Ht#_N*(cuwN{MeJO?RGT0v zF%d=4prABQ_WmON3@CGi%}~Oo1Oc)MhIlja;w_+xm5q4 z*$dBFCZiOlmtJ9#thM4Bnk z-%KWUAe0aqCm2eY$v*0TXe!aVKJ;^aD*9fPD)xCyrDC;g&Ko(b7NLUbg8XDY=oHU? zs?5!CFTF8-FUWTjnNX4OX&qB}<6>7{Ze^B@{p#*}zLHqoAbK9Emed{2oaCr7f^ zT~HugnK?J*RJz-kZ$nvm`0lwmtR8(QY0aw4aYa;C^Sb-*UuU(bior)0=a*b~OcBK8 zL0gWYaev#xX5(hh(Zc?Tc=aNP!j-N9dCb6nD~Y#F%!LT-!9 zowsu-c9QVk0uGY+(xOTIfP;GBr8(BqpJPslSxm5URAt}8N6vtuIFNqup}yzAwP5I( zBM}j%XHGo?lvU;Eo1BV@ zoWXn)!S|p7#Fe<{0`($vJKLL1qO3_32htmd!hrX8n91Oh#-0=GA zuXjRY`ZF*TJwXy~ga(|`gpPrxOPGK3Wy51QZz;MKmuZ5>fa|r_(BJwxZ|^)LCJqD# zjW3yig<3@X2T{Uy0I~5H6w+pZx;b5f*m6K2?h_+F+aNHt#B%M9oEZ8(6M!2Yy41j% z6Jyt(h}KJ92W>hIJ)sZXdcD56mnchQ)oF{>e0!1{=W ztBZ336OIN&gOQR%HN?{cVVwn?ASSb};AspmhXSW>?x*~rB!kL9gg7BGfe1En=7gFy zCknVw0n8!pRWP~if;GTs#;cRGM%1MuinMq^qsa~N8wnI=!ps2?f;vTR>!F&a!$r@8k@dQym7O7R9&rzLG!TmS@vz z0VMyX(1newrw%Qhm#A_jYP5j^_aEOg6*8=h4RB7S%Nj6wY&F>}xKGHn?q-v!tjY*& zu}K?lFfg_yCauOy&r_RJa)yOKm8A=qbQ%*K*4iHLDfWA5gGH<7^M={7w6t2~cPAaz za2P5ye`JkPjRZ3mkY+%x%VR6BkCe&s9RRODQ>GaGA#=X2jBnA%Vq@-jDVLVXWqh1d z^o_FRy5j|FHL~z5p}W!T{J^x zt&f%9ekXL?;w-kQWjZshk*H-_ zHLtMy6jC`WH-j#@Ip5_;ZT8!TwU1kpSbhk?7H559+1^#_vTSX&O$J|Kmctoa{}%cT zy@meqhg7Jdb9iSVuWt5Lx%_$3O=WraqjO+5ngTb7GuuGAkT8pG~=;z%B_WJ zja->$F-SQBR55Z!LPL#OqmwX7P-x1}cZ?hb!sX>*0B)MOq{N`BZA}7DH4Kw_-h%8k zZyZAZ{LO;pzXgt-@prCYIy~u=O9O_m#W8-wO+jayU1b?Ebk&A?slixVF1$*1QETvg zpn+-->bKub1TnX7<|GD8PSnt}850U#iNQ^Cg|Gl53Pju>JpN6h(P)Tl^C!%N04t;u zZX)S%0oowpOoF8_(PGump&D3Clzs4pOhL~+SMB|ywM&MLUNe4(si0Q5PZ0~$cS3{n?v1`rfmgUM(_tLZ1jBZ}09`jU#VxLgPwZ8}db0!Oo zEi>V)7F$8R5@$5e5i)Mw@2r1fjAD7)=r!QYp8c+5fw8e`?dYLPv|}EqRqj^=<^%(z zAk>p5HqRwb#Q$9N$Hr>#i>;m3Y$!alXY|_1O^&<y=GGO8(T~?> z-Zzs~pKlvJYptj=C1PX@p~g`Ys43KJY94hZbvxN-3Kk0P=t82BX(*#RnFx~UP+|}j zOz}U#$e1XF;;}&FRf6uRs7p!Bfq;$$W;%qYT{B>H_!E*x2naCZ zevNP~VI}b30y;s=9x4gx1kIa-j*aBuOrs9&0A_gz{X7&k3xF>X@p8lZHR zG~|L1ur{+rFK2)xpeQe#0p)cHnU!H6ZFSJrlBDudmQlS)bIPF0WizW8Kzj^DeqINk zsk!>hPw=sHGxP4OM`!$bR{jZ80ISgHTjJr(yUIPI+P|)m%B76M!wkE>Y07n@HST~M z?CCqLP8V=0mMCg#=HXrk{>4Z? zNypuAr#t;G_o7<5;t8<+v`*DiH`1zXE8t{!>d?bLvD44#FoT~u^Sd7;->Lv);xZs1 z3u@}6Me~hlvS44_kF`K-_?oD(xF@WpE~oZUcT$g2y#qT?0}f!>^C8L!{XqOT885W4 z()~jG|8;p@1QPS;Ko;3&O_2k8vb=HcyuO~g$)#b~6Yh5GcZAbf0hbml2Ae0DPjLj zf{$nr#Oyb}6g=_^kVh8}o>30~rNIB6<~rpdEfrkCv&xIapEp#mTntjFZ< z*ZVt!-pgqHq4yl69gdH{l8+o6rKm?#{Cf|**Y~oZ@|Qv>LFKO$_;J4DqmOXuk425Y z{=F0t8`vpGvPKY@oXGQFx{>fCK=ca(GRr3$Vf4hx1J8UuFU}wiVgiFo6C2q;Bx5Q| z+{XY~85~#Dvc3`@TQ8|Z_l#<7+0rN+z*Vb&{t0hQU2emdHFfFc$Cups78qJJE?9X< zD><$QGg?PAZfPM0CR{ncZTW#=+WAhrP?DkFYZizd-KiTp2H96w}o=!#soSxln+$o1B$4r z8C(!yV;55_DVR#9lJLoNW4e(&?RTe>jygv=>Gl@{VXrCA1bc%8lfWdn{*$E$A(*Co zl{%EtYC%d@>7%J|of=S5=~+r$Cz_b!=SxMOC88}Bv7g3SY(RJq7G%z${y2Frmh3`f zdQ}W$UN9gW@LLKCFFruQVNeq6Mhnma_MJhIJTZI>HK8WiuP+xI@#l2+g7QO4?!W*3^!EPHnmd5}(2}R0emY%+y8YGKlWO%zi2ul0 zTkQuu!KC&{a2-DO%H_SIT(aSlrT^}Aj~0!cw7l8Jp{Ctk`!F~%C*?| zwbt$4-(u`EWUXqNL%;RNhK-LrvT?&Bd(rpD(QxH+Th~5m{Ri0AK3QcVSOkivjspeb zCf8qk=9#y4Npjr#T3VBCsYhBljQ()LBl!9wM>alk`98GE;=-*ow+k`NNe_7VE zbZHOLuIMbCY%M9MTw}FFt2#}FPP$M0689OdpEBo0IT*k9#EHGTe-HmE9Y2YrRe3u%gc)l27HgoH5LyG7m6SAh9MKzTr<1x#Gbt;-rkL# z0fE)v9h{DOW^CX7@{a8US^Vr6$#)W(QsI7?k9p+b0zwka1q6XGW}ZxT%q`OzKohOo zcp?Od6%@eS8O@Ux01`S7;)$jtOC({On&pBxB|!%gM466_V~XBHH)tT5h{wKy)5yHA zE$`^{HB*b+H1muOa#COWHImeEWihXB+AaOZ3GSZ1m8C<4e?iale>HT3EycbfOA*}n zj$UC>h5c2YMuqpEpltn)_t2z$-p(PFIvv>Kjw=-*uozuua?)i1dug+OBBzAqXxqf0 zJLirv8o^9krA}XS>6rAV=mw{cW;pf`SPbUfuQi$IBQ@xnr<7oZ+rdDCDbE^5FQPqx zHlM+3GRgJyP_W?nFGixP4P(aNIH_Kx0<>MDsS^80QY!X&vZq^r&i@JT!L3CINNyly zuraHr->9|UX$WpV(ml*Xtpc2!ymj*At()ne#zTuNP01{frG+GU;`;M8Jq+&r93Z9Tg51aFu9&0t~FEQ5z}%hT>AFO8#hiy zleUPqzEU#XMyU$S!?zCN)BcAS7BQ7Q8ShtSzTcJ?oU3~#h0B_><)W{i5)trHqync- zi?2IlP`w$CkOos*CXq@c$?GS@c?ntF#2E*}zfs7fciz#Upz%XhRVo_ghh~)h`DqVhi$M*T=%~MRH6L2>28q zw7m#+;p4|(S64|;w>@a}`K-b1x**QIe&CSed4w+rqJ_fYJPeXtszK1t$p9pYvwX%h zJf6U*ohu`TNnTBUS7>Rx_w`u-`%jc z$Yox)N+ZMIew;;R$9eL=r97@? z5Dq2ygomNf+ZJF(Y~BtRIspnT=o4@The1B`cKS&-n(9JdxR!x`o*@K^Zy~WbPMC>uP%M-v!LvPW<_ta|J&FnTa~bZ8G7*m892wv_gWv^;xIi`~ zE{us0(N?{fCb?t@x@eDqI0M#rIbtHijuf6&UfA3l}HkO?kCTYumb`X9i0y`mlEeJ54$-+^~{MHZ5L zV>EsPPRmrPv<`lX;FofZTJa@73bopW44*5sTE*w!bEQ^`r2kau^{Qnn;d)vl<5;Oa zy?f;yP_Lr5nB`t{s@HV*oNqzWr&X9{AZVi$mE}+1sfO&%R{_)i9Ag9^YB5?8hdlTT zII#K+bPMW6x4f|$9QcL!G0+31z0n_kgQmuex<}Lzxo1@0J%b`3XHbO6!KaiM!>2)e zxjbc~eAHw-c2-g;>Iyt3{d}*^%;`MDU9zA6PQ6lwa@Csv(fn7F|~J{=GMh*QhLjl{2!*qt!B4l4$T- zR4Rqr2+T^ojM(Ta6UbgNIyww&(x~wJ2(TGSu>SHr(8RVx?WHcb+OndhNX;-?h5faD z%;m770bSu#f->c4Jwp*oyVDdLVRLcCCd^#{5Da@P73egl1dQAko}Dk#Ksb8I6&pHl zii9=BLJ6c<*Cj&^A-mh89x~6095XU9(x@Ffv7BCEE7N>XpiWZ|&^V9Re#|E2LYN5R{WQTj^&qvJ$o6*Q- z$)G3wq0B8Y8f^yf*!-W>f8?*LKQT-25#UZD0fuhiBXL@61Wu?q?xcl4i1YL>)*s{p z>+spEoW)<6fhw2K_4_c{oJo;f=}noyOramjD+E2 z%&qh00UfZ-pMQ|!85-Y5c@Ve9SLovb{h>kiFBSBXe{Bn3PEz!}jVTO*-Uxg;GGd8_ z)i2jM3p7o-vL&a!y}72S6J0kEu&dXUxJ#?uzpjFJYRsw55o_%H{PZ7y1t|5N&hc)| z#p;wpMSkUsqw~ZPX26IlQiflw0+Z^adda3oN6!*Wi~frD2EC}amt2xsLM|cbnEmhC zzaK;1H$gQENa``4k&XGBnX~bi>);~*;yNH$EDIXhaXuC$ju2sne1<8autgW`+Vun4|Yn8(^Ksx?{UGO8sT7{U-bT0Ets@sM9BH-JfYwyXhHQcl z#sU4?LEoy3Y7sQpe%1P5?Dq^g;G7{5Ct!}+kcjeT(h3kTp$PH(SpZ0iK}h-K&WWiT zDWg;z-a;6HEr+$>sGHxkNgFp9S>22oI@YLv+HM#-Rv!;SzNCbQyy4f(Oa)R?`Xq4| zd8e>fe5WSeWH|`-A2dpIx|s12^xP%Jm{zmfFsW}65B)Ji+3qq!Os~60pN{_8aeCpN z5Zm8s0^(&f^2;lr;At2MM|uHi7PSoh2xPKfwS3X3{%Zj~LR|k|Qhy-t0&>|!zJG!m zPOzMQRn4l2B`YAB_{82-Fs1RBI9l*c1c=%_F{Q-hEhZ3nu`J09{qo1}mf93i1ucE- zF)57$HtFBgxUy>X-!4o?t5h0z6*Q@8GUs2_BKQtLe5Y@}#diqeJAr&2|Dh8Xrl%$N zjx@Qo90&TI#R1IggwD=m-^J}kw1qKQB!Qyy9y#WAOg2I@C4vK9)$t%8YDj~(`Pg@7 zPObgjZG|13j@r31mUoY}1G{b9+I8)BuiA0jTSt#PQ_flID{A%b@<=TC``fDFi!Yh4 zK;PVI%P-Q!mRn~n`&%0y?#I1VGch{!ts8BRb)(4)^j zOGk0&TXduqXz}9p)zzRaeFyXUv*=NvO5Z_8y?w76^NfA3d%biN2XF#dj23~}ANn_K z>U$6DI{M*dk3II-qz}Ptvp7=7CjjcW2)Alr%cvG%Z7+)+t0U&5b;2XrB6ce zzj>Y^gFlNi6SOpt2$m#55-pX5kKPcc&x#9vWLYzwh&hu1zVdT(1lWtV-uqnVJ)O^; z`T9ABUz#0p)R5&tnMNg;Y-N{_oA)oXM_Y0{Hu7e^tpS* z+le;09L4@f&?&$<=*|a>`xM$J;t8to-1aqY$LYA&$MuOwF&>eO zpiCl|)&pXIPc}9a#H=JPXaf=Akz@)1wP3F=n&B5PnDdF6id|B(9*Q^*y!6j6vOpS6 zmU`G>LnCuqtF_vYLt|H|<=Oc;YSo-jn}G)*qv6&bPl#qr?GDH6yiT5Xdkux2@gtf{ z#>!z9CM%~nTdh)a@^F58aYJsAg9r2nXwlhY=;&wL;NEw^Iy_pW(OIka?>XEQ32EIr zZFI}B87`-_*khAOmg^dA_M*jE?#CZ3SnBlznsmD5>Y+|&=}pIy`EG+pr;V*&y?)8; zkySdKigtSIA|1`M=4@_4X*A;>yMF?mA`K+;HznqE!&C<~iCRFdrLLrIApSLie&Q(s z|Hq6ShmS#R!Ytv4+BLDRu>8F#}(FhsPrN!KK~_!z-Az_-DZ zW~Nvu?x(c)DC%C~3liiK;i^!~#888bbQsZS=R7rddfr>;mU-pQyxQIG>1xw|8)>qa zO`BHc;yZn;w0s`A<*m|M-Fv%h^VWT$R{zUgf2^#lsAOVEQCHcqdiTH7>Q6j%$127Z zVR@g-d$x8IH4nFOistd*4yg!U(4lR>+5f8ohT$tYPqdJ|CL<+mA>J&78tC9 ziZMBNm*$ju?t3$RFPe4KQ&Q=ey>Q74M`@`i=)oCx=ZsN6{Aj$6k~h12@Y}+J7t_w? z2HERsF$Fk;noBJw+KmANkrYQGbmnYI#3a6cwR^1ph!Y<%MPojaM%)OHi8yNXi54QDUlrOA zFnejZp(XcZcbmPqxV1|jXu1-@D`{}rg{OR(Pd1mnhN<)eT8lY3y}LA+L@yT&Esiu6 z!x@9cVjtDjB*C81qq?GjOP$VTV>wVhe^+`4Bw&Y1Qi`p#?8JcQO zfGq`Pa}in-k*zg${uQq5G+5k)D`^1V4a6&g7Wfx`A|CL^;v+A>o|RAycpf?~_*K^m z`hf=Oz9WXtFwy02vvA=X3!zhBazEUO_cEMi_}$MwV}m03Xq+4@HTpeZVLn zZpC!bm{&mPCvf~YCu$_F!E}a<=C`;O!jX5}a^Jp+%8K>tR|AzlSG#L{IF#QsW=vB) z+B0O`qT0vmYlcpF=9=!#Y2dLB80G^8PHLK6-4$_4A!m^ogWZz9OYYT_sYj2kN`KW> zR^HKGQEr+sXC^(ds&nV%;PqFO^4#o=kC>&wkUQIKbmfmMLvLBj<~QF_$z+dS=wK{& zkGT3+Vc#?Pe{uu^czlBk+7(2GSV%*RD zP|JXi#*+u_1G?zX>^-u9e96rgL(WZW05=o<={%)$1Natqg}jNN6!GXdebxECX3Ne} z%y02Gatb&`B5)Z8i4;t*RT42JiAf5vTo-U_1UyWly(@wqk&R{nl$j`3V1k5hUe;b2 zt&aVe59~%34->U9*w_%RYSJ$40slULzP%+`Z#1*4-xw{MdL-4-k~;DnK9$H-!EAYQ z(t$s(x&^2hL(fuQeLLEYEG7@M8#a9Vn@2ZSb`AICbSy2v1N*xJYBqqM%&0P#OUWtcmS`1dffm1jq64bq%(@L2?BXSEXpNrqP0%OF)(H*EP{{e;|T7j zSwxb`xR4PPZEVi~D^ zSTGHkXu=oFviQ<8mD)Zvm@)(B}%}uVA<~$Y)} z0tGpYMKV=y;#tT5kRPTsws;^MazYb;5YmdLt7$`aJtG700>JmvUe%c9d``eG_h5Q? zn1F42j({I5?uHjn1~|x&{vZs_5SQ>1v=f4QM>JT>A|Retpju6^A(EY2SC^YjTccrn ze!e{%{k&LAf%lb!NJ^*#{ooGWjXt{F?DN=)s_mV!^icG{^Pu&`hd|j0xcJJIiQn#R zAO&s*j=OIKj(Zt-XCxX9MbQ*TUcTLtp9j9YFyS8NMs(^xTQg0|86DjCmsf%NZs53m z>nG`&m46uf=)%DEZ-DEY?c2Ylz*&Up1A-sz%J>!*_}2g}!Z*b*|3FZ^1k4G^M;^&p zinXhC3KgpOM(0drSB<<#5AiF|F;lu_N! zSUZyK@61djz!(c3mp$Kstq3b1q1L^DK00t8dSxL8q*ux{T5i}otLHp@)rb*SJw0dI z(Z(x@`)QQ41;ZiN=J|lX{s3^ikv`q8ymwMiLZcn%Wr7>FbF17cy-Ehf;hFXCZ*A{^DtjRW`K9RT<$naVB zf}Ix#4_OLl4laZq|CxNS8b9kf{H$%5p3G>V39}@gL5QeM07^8{2D6LKaCn1DgmAkN zL}bwK<_V85fsZ3v=SH50_dH}S;!8pW@Zu$e`$~4@J)EESP@cu+%`4Y>08j)m9ezEh&!6wz^%6Ty9(qE;q^;!fl+F!L<;~PtGZ5`vyWp`ChbNj%O1b4ivCN7@LIlTNhaU*ZOP= zY`*KKZKz9*8@F~bh=32Rezty?GYKSCMeIz<>i1ij=gw4BtKWe5BM zA3^#QHONN^(IBp;nuu=@Pb}~=O<_-rH~M1aOkbFH;l3FzN8D0^Zqx$>cUl?Dxt_kB zlP4uqI_u=QL^^dY43j5M_Vtk6(m?=sL4f0sN~QYnk2x;~QG;WdVxo*Y|X~`r#>v_D|e^gWEPt1alyPq9Z}HA3`u^ zBBV%>r?x3gN5_z?F-J{G@iH8;;KcLBYJiGSlwY)gjboO{6cx9X@lwO}yEI7%2C+Xg z8Z9^OQu^dzx``X$9d-CyS5qz2IBEvw9w@3nbeJRf*c1JMnF$7&dtIK)t7U2r&0Zm_Bp zIePD=QC9kig6|r5J~^IXx}v`k$XEgD^|4!%e2i~6BUh^A6J#>EP2MGcPhnAX$>lP; zY=SIHuNDAVy44Tp9eVtK-vm-rj*HpkGWy1dL7sPbfwf4^hDUAkD!}~(-!|YICU1T0 z+Wuz%7r~?*pXB)lke9g--`W19aFhutPYL(#$vjH0AJYGP{6-nP1k$z)WguT31X$Vw zFW3eGabgC{n}Z=U8%RjF1W$~D%?Xz0Op!#055TFw4crUS&Fs(jftZDRW_?w2+1@W> z=&$Inu`l;tUj5aqJuc9A^@^20tXy$5XoPRQ^%i=FNnM1&Ju~#xGxYeApkDb#%ld-{ z*SEZ(L{Fa_PoH^pYZ(1;NGLP}Wu65 z3*z7x@&o;fO+N6yyc3y=N?1k!oTz5-3g}{V7ZlMAI0^-#S4hz{jro;>F_^qe}P zg0w`0e*Fo8SRrBt1CVpR=ap}miSdFu;r@7W8k3(mvoOFjiVgG_hxydYYFixjRGN*n_( zk|H|;&GYf4pMvWGxDE{ZT+%1_=rdB~f~Tax2nZMPYw2P!WfK>iDa6eY7p!LSh}Vmj zcL_R1B>x#74!qzH!UfEk`QNBZ#7*?vjYl@(|KNuWUE?=y9N)F!ugUf^ca5ybozOHP zI^HoFHrOSM&BrZfYs?M7rs%M$=9ku<88yFd<(#%L43K&_z>IC5v$A&X$TMrLIU!n0 zPp)S^sh?~N<fkeP4>UJDOo zx2B`ekE_*73f=8rO4=`!x_Xuzhvr%=u6d_`c@ zt8G$8x{IwSFGZJ0?b)EUJS?Mw@Fv=+K`+%?fVn{Ja)IVcBQi&zXs_hmjp#j9mQ*%5 zM`Ki~<;{;Y@(P(e_)$U=8V9}BNXw%Qu+^#e%5u^1_#X{wqZ}ApjS*w64utCLoC%JY zWzda-V|@19NgBCNpMLh`kU`#}kwQ$26o$dfd+Q{;&isCvVB0Usb5iHoKG-QArdf#} z9sKnK3Qs3MPsYys5&BiwAoS=A+<9;go)|+RBGFF^mKrRDFu`>0hY7r3Nl=nHO)1z{ zF+I1W<5a3+382VDXE9|*Q^IxBfLvbq^(E~QWS|W)Ps#VGt~X@mXq`XyLN4rD{-PmcJsl5H_J%DCtrK*Nm7t#!3lOV!XD;esZL=PVvyJ#Xkyk$-c{*U^v z?>EI`@li;6wWZ{=AVFvGF*Z-Un*0Z^3McgH;MheI(Ww#aLsJA^cv zI!%#s5^}`dSAyFdNC?*75Md7ldVB=Bk3a_qMo?r^vH}P`d4vgsC|ihbrVPFiW&mlS zi4y%9>6jq>Qg0fIym{6j%OoHhvYs(oXqiv%m$AVu+h#wwWLC_g05rq2-%!x;!P2X{ zx@PF%NT5LPnw<2%*nB4(bgpeh9$1s9ZX0+UbnR0A%iAHiO5 z&I3hPKKLU`xL}B&D+r$Lco(fFjuwDeFs_dm(ETN07jKaVbBzrg71b zuRiK3Pb&1j95dt1uMOlCkES23y7ZQw+7bI_wflj0>-vy)4H6wp!L#|l;|1XRK( zswZ=%sEMeWi^7Ar8w4=xNJkSMw7XD@#dT1HN|7(7IX8O4^!p&G=TxbW{hNJY9jq+2)R6DhR+Dz@CZl{h>f1p01z6DM| z{4$7=m3SZ;ix)6HFWVn45jJau9NL%Qd?C)qN6i5;czlTg%FA3r$ z^pH1HLfCIX_m0TM%u&uqWB{1i6?!h&Ux}IxoR5Ia2uUI>hv~H-c?Qnq@Mq-C*?)28 z9(&?|o%%K-2@ zU0l%Fd_ZdA?J`|>tk=RhO<6Ks?kLv+2j_$`mX}JUMm`rxX;b1wZZU1Mx*Rf>eM%z7 zmwmNLhMC$@OuR;EwfQxf!{iRztwy`tVaks+mD*lpR7?Rdgv^d;A*L@y}G6Y+1HYE}&Tk z801Wzf+?nTQYpu04+RofDCIes)DRlVl;{dwv=$a}g~~j`hPh^^$)t`;rzDzkLgo-G znWf%5#ADP2%G8NmmseFGttx38zf^B&_h#gpH?9A0sW2tG> zJZdR*DRmWfqu?EpAjt|2xD7&pC5Gy{erN4$M#f9}S)yMG-0$@#By=i4)|=^yu>l{u zIyF#2)^l!64+x&&`9zdxu!=tr6||(t<6=LP>VY!9vr?z4a`+`*C3!>5sgX0oo z0=gR+5R!Oo!M^+F?VUGoFM!uIb&YS@@zxWomoH!a1h~9oZcBCP)LI$vv?hL%CR$q) z+)s&C_+!*#d(ZAxmCRh$JPAD#jE)Db{|e_BH8cG<)P%?F+H_4(5WYYjI!_A5oIHu{k(G9pHkYACuF0$*nI>Bx=9 zZ@|z>hZhiYG-i$_FlnBMki8NYjQ1z%e8v#@PyEFj$r>fZxB)&?$iP335r1y-;{-b) zd@b&2MsgJJ)f42U4HC|UXL6s=HOQ+(1QD8$R)Uv%A<;~BZ3ew2L0A(zFhQg%5YecO z!qgpifrL@gpC=LI1(`e-pmqJtf#+(R>J6$H0h=Nrv`%dG_}ZthE_ zyW7NWxF+g)IAKOFxJ%zQH+&k8pxeRNM9B$bh5G@il!3Z3_g$6ge2dAdueErG)ZSQB zjy|&*ZMs^38B4RiF?mBV<{ke0=Y6|(qc7^kT z&ycXQ3Vh?N3@#`{U%!L@Dl35oodw{DC(`d2Tm}^f!Gx|Zpcy~DuM}v?@OA08KTfo_ zC*a|#s)B;T!s$Rg#;jBVSXEVC4%X%2KNJ3&IyEov5pX#vneH-W{>sbIWfc|URkNlu z(yHaFIj)X48Lo~$x^Ik-#vI6}1(REELn0w@SaO9&<1;Qn3B@%aBtVIf-fI>!65v2)PMf56Dg4 zS2ZhyqIEnxHH^){GYM4iVL!L*yk&h=pg7ABh4Vmz87k@JhB zavDzk8(<}JPk6zwibjh;DboU@TqZxTS1V)TvaQS#sY(u(lx8kbt@!yRK#Pf@`+!=3 zx*;p$0q-;6$C<&0=Pku#A7o%H)=&{@C|-#tVET0hbv1R9xDMk5HAa-feQ{wG7S`R& zvdd+Vyos}!ps?&F;vnIRY3OLi)KOHpVub}5PrkY+!F}X~6g{8_>BI(>a-Ye7+MeaKzp>~!mgc8@5E zVy2{flfFP#ofjOIRhXsB0at2NS%q@>mc6!8ZQ$d8bW(Tr?Z}H{EWzyOIXO!QiSj9zNv|deTxk^zsh`7;%;7=c{D=R52OkZN%rzouj zFOVk}qR*DrB)2Y0RVKo--8^5Yh7X_j;b=;Img2sVP{KGT$VYlJX&|y^8)73R!dND& z3@{NW5rUQ$C%&z!8RCATe}f1wUS^^eFELep(Ncnvd*9gu0HxJdjLw?PM5RFf(?fE* zbQBIe$wxZJRfRr%Mq1iYDqa6f4BUou;C<-8%Ox%I_U@VYVAkjgt#;UKNm6c?ow`Q~ z<=wczty$ijiPzur&DHw>>);JU7v8|@H%$WbaRJe`@mxJjn2u;8J2wL_AC-ZOTSqMz zs9nMnq!W6g>HmurW5lWqOaDkO%z1R%q#L@5nBM-1?t$MQu3B6L>PP)zMIXvk4txfG z8n?1$+JY!bp`=*xO-}*sRCIv3tNYhhd;o)(O%2GQ5=66y_&pS+P@Raz^hwO==ebp2!dFnrY#JT z;WkYph^h5GP!P4Gg-icKnEv-l8HBPuINaAVa_!2I^b^8k?hKTa1n$%i!WzyKG!coe z0D%RfMA#MDNhl|8)nIL=ez6z)PdXyZhGEOsmc5R?0NPi*BWHJ(YFBBu487*z$9FVb zBa^I_$oqathXlN_Fw&Nb$IY9s05q8UJ--}AY)gtQWmaZ ztyzxpadk!L5PGj)S^cAj6*g(M6hQf`Gus3ofP!y7Fb>=WPc2wiwczm7CF{2RR=4=R zX;BDbo=Dxe-#lnvt|O&dozvkDvLWWr3;b z59qr|x4pKCjfA{`x=9s&&3W?5T)Yymr>>z6hzQaV0ppTvp2DaQhEX9Rri)=7vkD;* z*p(A7wk{qaYz$EY^9=kG*%?vQiHV&P`u#k@QKzWu~ze32xmn`W>5>E=^zhuXfGt|)1*l^zAb@0J1 z_#Y!FB64xqEq0U1ZnZg_Rx7Vnn{eEbNyH(L>=iN{HZk*payF~o)Z4KH^rB?{Zwak! z9XUMa%(G;<%Y(aH{$oTO>w+waCG@w)NW4a1b{+qu)K3(i1^{&`1$to;2T!LMsxJj` zpG)@+_)_T=);}#?0Vz!O3tpn|Y!>A`#BT`x?u?$Mpm!en_~y68dFJh>Xm-tlLuu-5 zJm0{}(jP2X(?9#9shiQq^WbeXg(tT2-p$?rZe*z-Ba95QkT9}{fgD*Xg!kpBkalhQ zay&pjLEXJ@7zu#4)@pS|@Q7M3*5M>-HR^;?{e{FbA$`U_6Gt%)a8|g zh)3oDKoQY)1Fu<7R8uBSQ$!SOi2$}rB#=HAG;_g_KtQrex!hIa4}c*j_EgMmYl)P( ziWONE%YHZ?9SiL9edsEvE>yx<+koCM=TH4bdDX@ zT&kcST--Lg2q;Z1W|PffZZ2-5lM|kWY)JAhzXh?f%{Ah7B6{X23YXe(nWU5!j7R2tekt-{ME)O8uw zi0v7@z+11MD6)EpY7ytbQN0#VUc>-Fi+hO&GpkH0qhBhXXhB;QZCHKv)vLkgIZt2p zHd)isRR8KmlMu9=yP*Hng}y_tq3^mzTm|mDfG!wh^G69N_LK#PPluVe0nC89J!W|a zo-=FU+02pio(NFp*8Q}@&huVInD>eL1wIiANeiZmh%^d+=Nh8KEzy#(5sG5+9(XvD znGwM9iA{juKaS7~S$GP`B0kL$A+mgueuGm8uO_&(jpETC%7h3QS~LPrqnE-y%kkQw zTaO>#y8NNrpVXIur63DsO`mII+2dO)s~*tEO&X(5|G=cisp-P_FIJdw>JW0GD_?SQ1PTvAF{+$s26@%n3aw zmtfsd7sz_~exN8?BFJgsdA^5z7h+H8N{CdFm~ol;e%UP}%2l01S)aLYp4rC^WrHpz z=nDSRVMwP84u=7z4B$ReI8EV0$~s&2FtCF$!2Ymot{Er>$!4Jvq|8pI8KqnW1#nT= z;Rrj@6Vi92V#9~WQsNO#Sh5(r)V8X!a#b5DpCzmdSKz+)6J8ezi2Xk$4te3*VcuE9 zn2LG`LX)80?-8v@Jtl@If&;=3h{}z)4}`?|qXGzork~*Y;JJi-JmOE+`6CfOe8vx? z=Dr*frmq=?{&N4r=){9&`i~@`Z^bwex_|3856l6}BmOPAE$^W>@B9JHpZ+w--HPL& z_^$84p6SQ^5%~AUXtXgpX3VIF&mXz=t_RUO5BG;>KlnA+>WhpXeJ6VJ{VhQLZp1Id zK=J!q&=2oMh`od2EX91E`L=f4|5plF-?UjzWKM!Ta{;az!8tM$_&W(LIJ71fdt_aa z5Up*&!L_c0Sc&+>4GI^NhzQt5B2+jYCq|qc3`u+$S8bTMGi4SYVVmNdF|Vk?&6~{C ztf0e96Xk6vqU=NZ*s_&(1k2DhE;`^<=J?R-2lZ}E<=WvzyrF&eR#CgDw|BN}c}@Z)1=;o0?SZDwgH`Q8_2hf{_Ag$t=P%4<=m{fuzP_|? zNryDY3OSD6HVuuJvtY`5zP|7Mhp(}zEp1sH(~@y?b9T+nL-*VbU~W;1zBr~}UEUH0 z&oGeZ{SKSSQgFo(_i~p~3FU7Uy&sHE%v^74c2%#_fH&rL%uGL} zlV~?C+BtLRv|$TSqo#WDq~u=I_spW4GN3x=ACRnnHYzUQw^JZGcro*3RzI@P1^#1B zJU}*`U?}LxBH-@A7bJc+OpGUsfUs8s9+R)M?oIXGn{PYzd? z{No$yyZX~#W2z%0Jr*iXfQ9aSiN*oPq;F1NJDRoXB>65^zC>@9%s=KG>zK>**Oy$>VfGE@Ajs%Mf(VBO>U{o|KRcUM?2c#E=#eK+-raap^{9?m(9k4ZRk} zLGQ)UWTvH@N=Z-0yEJ633T&)NPp@eSRGC7Ub)TG)ZVH;yQ>J3(K4gMJs{`mtpc)4= zD~|`N*KBF(e6MNCmL{&SX$$<-V)7KSLmh#tl9H-GhuM6I#9it-F5eTVstTZ6Or~Gv zRKb1ScW+7dbqMj$Of>u)X~04LW!KsJ?Lr^#x(q_-7#fU@fe=^==N?)f4KF`*XgS-q z{1A8@dZQ0u?wC(!EGU=I3Hn+Kl(Tv%r_N6|->V1>2{jRr%d(Pkcu zL0dW8S9XTcyZcTYc!C4cr)&>_KA(NYojERHS7>9qK0v?2Uo|_nY74lOGa9(R*}wv` z^dnx1>OnBtb^!lz<%KQTzk%#i>xS}hohg$;56fgme0WAGwK(-gqtTHfRf6GMrcovX zGx$s+P6NgP4rFP-Jh?Q*VZwio6p0e;0S>cDjgE1d(KBEg+OK8PIhmYC4?-5a4JN!U zg`n-^Np0s%624~m93V$$!f1Os2%;xB4NiYl!h@C7pz5(tUOg&h0{{Z8>L^et&^!A; z->*KEqANq*fy(yJbJ3gV1n_INp)Wqk16w*Ft_l;bF|ZPFs0h6Te*6qwir$I-2-5!N ze+Gg%at?p%?AXI2Sy5g>@%afZ9Yec8SEs-qJV{yZh4t_fXnJ9N^!xQMaPK`E_MvoN zxGJ9=xBfV|rK5VoYp-p{`XzXh;EW@qZ-7X5*5iJ62P3B*!HGPEV_3q#VE%>2>@PmS zlTDy!+~NsOv`m6bNFtco$I!2lbA|B?XnJoXm@#P(S`~Y9;iQUY7(@q_KpmK#twtA7 zc*QLCHz$s4-n#${Ic;jJ;^*FmGSG>e$G!)qp1G@P{G!+iv}*8p&;t8*_6IYdarwkq zD^Ugdz1mn@b(7@`sK52W4bQ}Bgp}d_LG^P9MK_3Ec<2gAE-(Z!yB+k~iR6Y&#It0= ziy0cxd7MDKH(7!fVdmcTYfhf{!+rPt;l#{jl9z17iC{^DEa@ghHc5RcIly6hn){^xS&>(0ADP?JzmD2=fJ z{-Vt|$!McH^o7khlZ5dOUA%Fa-}2RComr24wPud|XNztbmJf1Xy+683z4`D#_=(A8 zGsRpaAvBPE>}#?IPm?_wMZ9}iATiaH(UH6pM(gnB~0{6Ov*ppaT4AS z4|JRy;ZFQjYUXG%@n)mP*_z>VG;>zs?Y8(aTD2G$mjKfeU|dXp@o?vh?j?`*j{kPp zlCB54V_Vj}_~N>j7hXUYy!~tXdz+_P*~|e`GD4-UP~-4WpKOz}PJ_AfESXJhH7heh z0f&U?*p7~XkyY&e=rr^(pZ(4|=))yT?o0aJ>nw1nojxboR1Tlh>2nlJ_BnlIn^fTR zap$sn{h`Cdm-LKTGCZrtGx5*$LW`JNa7R`j84nDmB7bF$+?$0w?6*F*0HN* zPKmf}M*T43Bk#HM+$N17Z9rY;Ywiq9oTnvz%Za{!E;E+adamd*G6PUmv3`JpfDo*Z z1l~LsKN_eP1d9ESKSF}kRe%tikgeD_G9BlLV_zb@puT@;Aa+UA^A^>;-?gW9egyfY0C&{tVS7G>1Y*g`-)tLVQrztALPm;QTS)NqtZIJ^ z$A)lFrO!0G1y48jJSn%RGe1gfZJLCtJM~az0p{Wm_;1V1GoBK|F8tbEnAtP{hQL=d zv0eXlsSP`Un_NJ@-)X>4zQ!2H^PK;A*@bJ@FngATWY zrHs8>Tr#KLHwcb^qxd{rh|Yt{U{Y-0ou^R;YG-3O=GExy@X%@W4O|GuqjuB*ZUzxG z)JDVlzWQib3)LW^cW@C0%fx2EhoVuIqdqaBe}WIu0Epaz7=3{*${39tqbtxuhS*u+ zLJD8wv8axDfN8}8G!f4WUJ4ie)4Pypy!uaf?&L%|mMoj={KO5YiNJLdKMJg_JN3VM zB`~@902yWk1OCX7@uNoRgZfdUaQL6@NTQ#*KB^->DOLD=ozZqQA}$6+j@pd6_YKKU z`pMUUFd$|)2)7sUfrfv!{lwMV$kmY}4Th0n;0ArIt>`WEdp*85 z@+Tj{Sw(ovME~Ox{#FJs%NfRDz%^;m01$W5=#2Yn6x}S!@Lh#=>w@6RC(u6JQ{ej~O^sNEfCK93v-wQlJ9=SS7Dg z==2sj+jhz_d?NzmKQzPF-`CY<+4F4k z`_H%K*|TbO@4qgjeK@l6<{T|(i-d_8Q#b;PIVd$iXpllqFJlFPb4aaHqoCxtRF^X~ z)#*y*IHh33kq%A}SXuPIZFk*uTlwNUZ=Gtr7!E6q*`;MU729*%6&3EB?G-s?rP(8f zf9_b@dM_O}J7h9U%Nj7p+Dt4`)R0&oc<6!&6@|Kz1mK=7n{6AkIQ&E+8lr3Mq`Ak1 z6PQ)EkToaF!G;{7YjrAi&j!KkWbM+JvZm#gSwH()s~kRjP}8mMv};UlmpHtkA!XI` z)MP6%Y}53-49F}Q{i)5vbDor#!#HrUA#EnP_=_d$x8Hl}%K0VFTF_fAqh7bGAaBF5 zV|)ZikM)$jgYRb@-_jr`zGz+e_MmxY{97@pODoPWNAhhJTl$>E2K-v9 z=Wu13^+K$3$HGi|CZ5p|0sOJvV)wWYB0j>mV;*-n83`RmHMIMnh<9NoN;YavuyME{ zhNw*pH8W&InN_mJNta$;e8k`*tIqs@I(|5_s(R_lLDoEu&$RY!D$CXYws2a@@$<)9 zrWLY4lU>%-*P6+5dDcNImsX>Q#~K#RkZ|qQ2S6lH-$eaURn9EW%q*W-Su{N8QsPJ9 z2g=h@ELu*H>9QG(wyaDgr%th?$?=o$^OUaOaCSH%4!+Ej|gN{!4b!Egq8}H2+|o)#LGE0wnJZ{ zk8S6*V3FCy4}4AHG@G1~ouzu{orUgQD0La~73pYao^5F_aPiB{buuj2PZ?k&n3sB3N341^I^9Oq;;KQqS}%Kt$X<0WnyY_(;BdbKBgnmU6w9g6pqm5a?!p`Z^Bh*`iUwG zco?d2hA9qF*|8C-K`DtKNo1O>*l`qBs)(pSUn>SLpbJNL9ITWWbhRdFUfWk~dD4t> zok3C=`+0XExHkr)zdTNAc|+2zG`JxJ4Ep48U>e+XRGVg;+tM=En5I42c`>O-v^~(V zrkWW-)}G@E?}=g%aJPR^KGH;j3?Tw;(!Udh;uvDnp7IzzcLlCZ_|%I7}?T2wNgS%5{I= zokTGZ(~I2bfcMPVr=B`{26&^pFzeE`WY(TNvzE}26<)n_#fm#&_$5+`m*@rduY1uq zN3=ai(e(uBEXX&QmMk$D&~Ia>)`R)$*Q5K;k7Wn{(EfOtSml@@=QP8IYfu!#X+zoL z?SD8}hWWN@SJ7pGw6}pwBQu$qf1@^s*=GqONV2>>HY5(6?k+vdo{iHI?@*wGGAfn| z;5M2qxYn2uS@ptnks+3Rv=Q5Yq(@6@s5EDy?_PKx9T>3eymp`6lu!6t!l2d|Wc? zz^5xV|M`B6*aySOsfJ9EEx~c9)#yp>c%1H@h*~mi?}JMB%AM$HRKQ%27=upW7+i;c zjjwME!F4#1nf()Wh}+D+MVP2d5V0z0+oP;r$fG5#udB^zag&SmszN*Z$Mc`Pylm@r zeRl8FJ1nU{^>X{mJCD2*@0Co1nDgV}EStG!&&*{nv1MZ8qo+OlDXzO;qG+0P^)Su# zomKY|a6bA9&}2AQPo=%_Pw{357Lw*y_Bd#Jye!()^icTmvK~4_{V2+N@|Y=fDN71H zN6%2V#^gU8M?bh*Ci7t;boa2HU7z%WMWI+U75{r>2XLqxJ@$$gP1>ik`K0LJX^Q{U( zS?D5Y>qIdVr|?|xlvtjL;)Sc-rD0d6pqD;*9Q}ExL9_GHroBLaL@R!_gA>Jj-Z2>7 z5g#=1AidDpqcrf^-xx-SaCarjLJ`ZwTqluB2}AVxL~hG$@dpx%p^gMtRN~tR3k(MI zu`ErNFPFcBK91A)f09Swc}XtM$B8?`-9>^6aDmas;)Rz)Du~CSBOs@%e#FR^#J5Dh zzHVHl--gJCL>{sWsEr{r0?hJuu>pi#q&dMah=2T;kW{;rL5w|2b;4(mkt*IwV(<2P zCnm5Fj@VBVp!GO2%5*hnqV2_?t6hBL=I+*t4O)nl=H#A)8-IY5%cVt~LFW;9r@sD7z@IROIh$o;OxHVSt%cnT%TmQ=MFp)`bIw0vaBF2tKTR_u%EBv-w-dL(o}t`P9nE zo520g{q`aJWa@(@jt?ec`WUE;*o$ic&sai^fJ2A3E>oqXu)Yfmg!+!58&UOT$R@Fu zHkOt)cBCYoh`$G~GDMx4Y!M0^^B}#z*%Kisri|H%zz{Os`>u6Iian4^EN2+IM@w-3 zK%9k5(k4la1CE3i33WhjN(hs9e_{qhG*gN9x+&=O&k2G)41*?>!JtB|234ENfLh53 zXrd=EdqW9eYGx79kYKV02hJ=v7>7Ub+yldnh7F@XD`|j{I0!#_Jf8onvM z>$bqmWizG>$kvtPKV4HpNkTVT_y;YYpBa->KGG63Ktz=gvHAifm9&cyG*l|nA$!tZ zd7=WA36cwHw$ox#=BvA$&tH|vw#Za!+10BuwF(DGpjS-H^t{_W%4F$L;5}f-9-|>W zBi-umDsSwwfBul}nCIQWfO{0%UHIE?*GbZRj-We9KUPGQU;t&6L{MDZEb)71HkQI0Al8U zBw}Zn`Gkp&C!LrM zZ6vGH1h3Sua{(9esYSw60gS9zIShV-!{mx+k54baU)dttl_hR0~@_ zk$eXC4>IKC8c&})$L{ak!7YqVJ9o~jXBX-7&PCs41LyMe(R=mYUijvk-uUJYU2jbD z4yG59Id@3Za!X+vu5r@C5*W8bE?{byp-dD=fF7g)H>TtL!5}aKOa}A83h*2_0X_m> zf*4fd&qMHbJQO^~%oAxg@rLa6NJ2DBK~5xM8lqqjGy}g=h=a^{WntlLO_l@ z0>wGA>sU?SS4IL9QBzXI6k6^cUYG73TQohE{uhcjpi0wdXz zl95S}=*bXIgPdNor5Kl<7d;nJKUNl8F-62~jNB2zoJBxlq4i`Vve}S_iTf`Il&~Hl zATf*a9v*MrfW#%b5pheXmuZ|{BH#>gmS9#0xA}mHzLtXadDT*v#H(fnr^JZ^VjP*z zo7o@%_w%TMMf^HcFPGehc>ps-d~)F|Svcw?UPAA2nTp+{R6;NyBGwTvjQCM}P=sbR zin#=zN9c_tj|&?^r$pekU~uU_vBVIL;g!5qrZjwsn1FP$e*vE$;4vI}GkFgS)%C z%f-1kgS)%CyTjnl;O=s9cZV6?d|S1<@5g&dRVV2rKax&WSEZ}Zv7Vv_yN9Wy)X1eC z$2$AQl}fd3u}pw1YMdiVy@(X7sKi%)U#UZTL$PYjz*%6b(zQ*wjMDgMp)(HetE*z- z{Cov{)PC8qn4z{`p**NU%2NAv%FvHU7!r78SGjoLOy+0uCGy=ims|>l$009D>4gX6 z)GA*^h?{`eU(w#Rz-SxJsX&%qR?TnRMU_v!*VfcfN|$Sm}yI-Mr%Q z#JMS*Ih2r>ma9@M>)y%v7mdb8XL~jw^`^P33AcnVP2;TT;Rk~4*L~wyuP+0S=f4QR zw+l84!ua0gCPD#J-biuKRtWLZ^Y_J59nG25-kC0Lut~Gy82IgxQ39I~YvpqCxUK)WN=C76C&4qjUw>Log*uYJa~;ds5wgUaQ` zd)B|klbW@938nZ`%l~rSs6xj|H73-V!U5p3@gCHnowl(Y!qXZ#cC1L5>?ggvB+TO^ zbA5_QJp~6v5tkDYH|Z<`OfP^}DDGTFt?#xg@5m3Yl{kKi*-^)m39Svr?U(>SCsvcr*#pl&-%Bo#g=NQV%Dm+2@R^4V<_2D>`Xx+kI z<)%@M>(apl$Q$z(+(hygvDM!t8GM3GXW|Dst*agmFtR%EUTYwD+yS~hB zTq;+!FbDBPIw;%0GHTI6J_P-gg!?e6VK7iPY_g!E3C?IDU_eMUT>?A#mTaSyI62i+ z_V^cF8Lj4-r+*G+3#c079d}YvuW;?@>16n$Qkzw|nrYArQ1aOi_U+K9RNqthTQWn0H2vesGU5`7R(bCtkcR-uO^d#eR z(82(Pljd z_CsN_Kj87;Wu? z$8+M#1ZF-s5D1Bt|6{<3B`{_i3$sD@()z`vPvZ2n%t+l7IMUTy2d1|>d5Z5x5%rt8 z)<{?e=}N$d%Nw<%A_R+?+k~AOlXaUh#fsvAVG8f5DhkXXgX2jvn~n=Hu^JtGw)yd# zUVYx6;Q8k1=ftwsMiq@x9nRo#GUOAX*z1xuK}5vhdxiDtP89jicg>`j(n!6FOhYf( zi{EPcD|7USW$I1_nyiyE>0uFz^z6+zd z7Jpg2{WN%M+%uf~q~T5c>&CPeaPcRjUMhEMo4k&_z@HBZK0S3QJA&rgdwY6Hx#X>{Pu>+2I2#~raY&yaY4{srcN zDN?-fjR**MktM7P+$Ej^_0)xgF^c$xA{VzwLxl{PJUY0tzjG17fTW>XLB(yI->ipx zONclnOs}pIbNMN*=7_;-IcPPl20h3?He~7Kx{t-GDnW0esWEOP<@;v+1KAbqhk;Cc zY@HKRVb<0A`l@|x&OUA~CC6vf->(~K7bZye&AA5I1C5U`oFkzCx%=p#HCn|H$%y0y zJja1mC-41at?p>EAA?E`u;`};aPzwm@FRE|LF5T7ED~>{vO1C#N%x? zs|!w+xl+l(CCQz!y=})`7hy2>qI82iaGZuoBrHAHbTw5mJ~5kTFdEV3EeA{ESQAkQ zCk|>cjrt|f{6rHXh8Y<`(Q$652uh@|JQw6%a__1F-E1hR4F{fZ0%$4&ue}OTW{>a+ zTOtFqZ$X!;=X7{mh2Q-ffs_r!)U0hB{2S_gK+3o!mWgK$jPut8TB?C@@IYO|I^ejn7-Ne@0qS+&8U?NU z3WHCJvaU>ENtaiAdJ&@N#BLu|{iI_jM+Qi_NS-SEn4oW~vd&QBa-pdS&XDWcYmLY9 z)z+UT#B0nV!0C7Vxe3S@cJ&5bK0dZG%TG>bKM!tX+HYr^H{FigYR(q3-KLYNc@Ltd zrgV4#xexQdd$<@A?QMv_^KG}+88u5H2AZivlIA|&b5!mDG;K*!%(=N39c-u4oL->p zyfpdxajPuBgWT;KVB64kHI$%c`+vV?AS^&EWqgefhAu&WJ9nRwGO*g<{Sn(*iCvX9 zR9YLjsv{Yj|H}k2r_JPApT&ga{W=jF_gP^hyw4e0dFU~e`LCbg`&IMlAiLC$8T5p{ z>u_A$Am@ovD8pCZe66ofy1!46$Y+o6I#Xr$HuMQ9T+MIf$<_SdD^G5n z0zVY@b?xlPn<6QrrCh~+VJg93*VabTCj#}icB@k69E-~Fjelp(PeG7}lVR`#9n@VU zU3tj3-EIB42pJ5fOmc$vO6|xJO@#>_!66uXiA!iP*_hC$!b$<3t)_1#I~wFWJ%!0` zqF){tmul$CD67r0ga{~<`xpF%hF*r=dX{;)+-SJSlYzvY&6qwTc-*@D77gpc#vOGu zIQ$^OFeQ0Q!S8<>M!b*xTFRl$Wv%=T*&1>Dpjho9O_QH+S?&VMGyh|GGH8gb`?K2B zlim?8o1t&YDr{e~Iy6WpU)k!^BcOCSTtGR!<%be;Fapo{y}ElGsCX!F*R`%E-fvM2I(ueou`w+{0U<$u^mq*nU-G4Tb8El$_^Eoko4WXyNQ zu-EAPVEG~aOTuPXuDcFvx7)6E>`+o|Vy9kN4BXS@2lD}%gZg_cx`e|5_}&H`zF$q+ zS1OXD{uI?ZZk|J>VZU&fKR>7{>u7KA=I&RE?bz8@iT~KiDP=NG`1E}--7q*_F>Rs# z&8>;I9E)K>?EUwnSA!e$>ql)0N2gT zmx0**%^CTd)n{YR}B!sSnEPv@jSq?gT$@J7c6>u~2#<6mKskfx<;%eyV zxHC-^E8&-`nHIf6>!JH%VA7MNOLAbq!{Ia4;pFF^$|$(4nQBBr%x&p$D(NhaO6{zc zl#?}3{Hp(Ha4PG#)!I2j593tFXpS7Q0L*zxAj5;j#9Z`F4&E_6Pt3l)jl~L-Bg6{S zzBG-tE*jgPNEFmRtuEuoh4U8Fj3^(ue{;dtyVRJxEv(8&-%;1l+y=C^!ICEmNnmIvQauE9NaQQFT$sHm)wF3T)$AO= z!=6WGIp7IhAR!?8w&DT4j?$*ddqYiDn4L@$PgEfW?pI9oDW{7?D8rpFa;j&k5881FJA;y zwMw3TUfMoQIQ`jr?*wQZ?_gLU6=S!0-GYAn!IwgRAJ<}?d)e`Ud?=xS;0<=)?AjpC zMYUA9|qCj zzjx7pZEgEpVOR_Ba;1pk;3^g#7ILuncY%KOQnWveF<7WNmXz5nS*z~>S*I=!*}A&~ zP!q(pfg0SLgkt2!nU03;_vO{~1i!r;k=G)ml$)c4I#){#rr=0?{T-KSi3jTQdIMaG z{YH`#rx(L#o4C1*93U58YArOVh^x1c*e$&;iS6?E>H#)wl8b4eJbj0D?~p%qMjP4c zfmHk3=sR^$IDRYcN}F5&A{l0|;q%|D9A*5zpSm6Q8}Z7Pu$SaCq|`Fq zs*jiHaW{ZOl{)RmHu5KbgHqNK<~bvnnKlJ!TE}&)Q6{wD>1nFCcLb_Nce7=0go%*5V1q9r z^U1EyBJIWfUw-7DCy|kZ3)p$wVXDaz$c>noN~59Ti3L4eb5E9|ey7#ppk*|3k$V@v zx;)ozlt#MAXRp}37T)}s`w0}FCWVnugeH)sC6j0Wd0b|L`~Jv0%|v4+0`#>8`W3)G zBO}LO=6a&9WQ`(Z(->)YfjOYYqsf4BVD;xXJw2tiX5_b$R(iIVqA%6ULLU|7T+ku; zxax{h;KdmYdYyegQ{1 z-4hh+I0EJSfHq%24r%jcwFjo`$Jc+W9bdLapU(K?YZl~NCk;J9mc(E}qX=02s{BVU zxpYdakne3t;v7>$`KwE`94Bgh5!K4xZ)M!wJqq&VW~((~xa=2^XW(NJj*)$D1b6!p zNZu>P8_R_HcPuLfoZRlkA0IQ`ezEpJr5}GBU+1w<0?^4uE0XIGE!I&kYZ)LYVl|DP zENi*6^5cZ4Knw)d3k1>h0}QUR_Fh+_yB5}DE!;RiZ9V<{#*BhGjn%iu;ZIY>wDeRZ zC3|ZaPu&W75pN`bd1e{vzs0f~YckdBkC82Zj(TH5^-V^iE_KGOVzNZ^7r=DUI-oTg zIdWCZg?lesrh@-bw3w@2S5N(^h6>HrX`8Hy>RT_XKp)#=_V%NGt0rkO40IqUxh~O} zqv4!C9e z6C?*y3S%&sr=FuVnL$`qZ*8@Qz0Co|c-I8f(NdBoP|=ZR88Sqql3yT)*Wmy?{vqP7 z^=|QYn)p^JZws8G_4BJYWIX5fA;&H*kF85SEPgoM>8ZL8i^4c!TKoCa*olCEP#A+D;4&1(WM$>tO`{elLgD%(t9#LbmV*+SP;GZ)*dF;`!r9 z!U2S^bvp$r7+y~j--fI}zW5oB9qE(0mROF3iFp-Yk*OL&bwW5LioTW1SXoiZe`Cm)>}`@b7_QWc4(| zts!BdqC-VH61CB{@p|nQ&ae9twg1@TzC+@)xHkm!%7|vk6zD-3BH1c^^{CAHrO0-Ve`0w0r>*F&udeFKbIo; zEFBU*(ClgNxCuVKQ!viS1VHThv-uUKS26MGOpXd8CP}g6RM9MbThQ%-H zw`DbNWN$mDAMaj3&7i7SNz*@TzHCL0w{_C?xx7sG$yN_TF{2+U6QL?LOS|(0JhC86 zQ3)IweVPJs9)r!aD_lz5H|k{|2|^mERq?b&rQ7_65B;7ZnM*#a1^o3$=MURa-ZJCl z;sV=;#l-YFq~!KRU-`IwTIS^R7%u9FPv*LBxA~?5WD{&pSZ}};XF*6ijaXJwgn*6e zrIZ;$KApnE%)*7*80SZT;MAJ zyXX8Kd)e~m2a&J2sK(`abH&xd@pSr+R~_0A8V~?}Z3Zl10I0@|bDI;5_5}MdEhQo`+Wc_FTRhAYL$$FL3HH-;dhV z@0@BsUV{z7qDJCS)dR5l<<3R^)a-G9>Cv0+@>&kyMwza1L4YYXjH->ujouR5u*%yA3DA^_+iKg_PI0?{LTk zy;FAE^Ck~6jOt&_P)12v=G!WQVdrepqP^Pbe|4m|X(q^|>%;FMON@*@(uoVDhTXoA z1qntdAykC(51!%7d4anxOS+*~K19oIu}Uz;AEN&nv+ftVk#6+# z9Q=*!sTAfpZMmq%tIb);MO8MiOB<8npV0etDvZ^hi>9a@{ne_Q%)EPyKWxDE~cfc_F-8V3K;+ z8VsA`ho8|Z8!1w0zhgFZ_G-Hvq?$>m|78=6kwjhr^A*|a>);Z$*A*}*RoI6Zcpj1U zjYgyo+}wToY9OCJg9_4;Y1sQ#y2w5I2~7=&8%`8}Ge9yB654aHx$ED_X6YcY`!TPD z?qqj~$zsaFa?|NXEco1Z7~6Xp)BIv6x*Pm4_T92*A+A`8KTZ}8_)!MvZW{9pq9OLe zpN^mIeCb6}zwSU-F@%bmb95v0!ysr?LB_3vO`W8Yno!_TTdmuFhJN!rjS9-W^De*+ zSwkQ%gG&?|R?StS)$Yb1V0|Rh#lwqwGD5v&E|Hw(zaAtll{UTpr}>pD-~egU*sW<6FOyJ&|}fyuZ3z z^v?o68`&2)_^+WdN}QY?i%AM6SMd@8ECf5?mx8urPL*smxlLK8z7zt!TYiEG4^n9( z9Mz+Y6X|AAkAE7DKTQV(8B$r4$0(!dOLpSDXhsZ_*rt=3|Dgs9q7R*&?MEaS={ysO5PE0rn5T&hpz9r8R)#^n4b?J(^5H_2nkTS}F3Ze;NGcwbxwF_Y96P~8j zo?Od(0Q5mt0M=cS6|#(yZ~RY@Lw08#UX>ckX2{w^-Ywv9l-&V*eZ8 z*Q1nPX_{~pIg^*pR2o@V>KyOvbM5VFY?G!mU3Q90__+DItN?&$XWPLn0xyIm3*&It4*aB++k_UB+8aA1xjaddi@~BU;?v+nNrt zD@>)^T>u$Gx$>Fq*q56D5PFkR|RU6*H&XBP5ZA{emi ze{$Gm57rE;w9W?Hk7M;R#+>sZKya;wpjKna(c@WiU^#}WvIdJt9~`p1(P!&u@GvG@ zzo&=Aktw}4wo$RPG|`aIsH5hvT8tQ#_)+GpyH`LFzhyt&@_e>guXI;1FcRsox1gXd zl;9DYsGo+GQ;T5vJ&~(3*s}OXbxi4B_i1${fm7;nx(vO6SjYfq{UKW}*eGKr5%xF2 zOmin{b}LS~^x8M&z^=$a_p7o|53Uuc7F#Fpu)7rBkXWNJ2J5BMYFE zEH!aYXtA!Y3nhyOw*dBSB~D8{n2udOss{OP-}Ln?P=7T0nA6sN-M>*pM_o`OdyYQG ze;;QrSDa+_!@@@_W0`1D#w{ZdH?uKJ`eOzm)3J%tN`Dx4zzwqxjPtE`RoT6#VQ4-G zlUcHG+fw1ACJgC_2)CP<2}>H(FQFJ@Tm2aykp(U8&nGT+)J4>gI0to=3YxGqFigCpXRZaHwG9oZYc}TR3#4u7qzOo z#rEf`DhP;ZdZ@{3i`(pv9$|52|9(>i{VWwD4|8c6x>r6wHv0Y-Hx<0=SnHcJA4CPR z>wW@<8mxmRs{FhThEMzx-7-Ns3$dLW1yJ{@k^FA%`{+Rrt=Yl&LuyA`WvxeroTa^@ z_WQ51CXw_{O1R8(1lt4cUPuA(`#CQTl-zKn?=v&a?{0sR3luQ*#0?>CmYq!Q_{JfX zIQF8gJd@n$^M-Fc4sJeu_#`_k6%nw<+@guQgmFZuWX-FyvqnV_;5IFia*`+8ORYSW zH)Zi~7+EqeA5U3Hv&@>XFl&k#`TYnK;GMT!{$;)S>G6RJmsDsG+wt@~kS}|+H#v~w z;V3FDw6xCis)eT{N>}DFo=wJdv_+k$7;@*&k)nj%%13#^dJ)yT9s~r&58|F#`Y|LW zVfe5-7w9|8fz%?DK=wSFJDCtexe9YLtz#Q+Br$Pu5%Wy?W>`@q0f*Rh8aporFDxJ4l$_ekUK5@a0thFzrSU6kp06dUM_)rEX-A@4}woGFOKoYC=@? z1-pWHv4~%sp(z12Rd837V1%GzOl^6D#Hwxqk%0Exvf%KKaVGVwE@H5jwmN~30>{pn zcDR`kXUD@k!-FY?HxiW2Sgk}o7>1(L7-HC>5jC9{%Tly_h~PKR0>06fz5y3g|CV|p`F7+9RR#CHKBHQ-X2B$zz z-^(3}{*NU!`F21FK|w+pQwU)USoP+DP+nc%kH z%h+?$7LD7K@f%X!VXStMD1Yho3JJI#gX+&bQ=E~$P`4ncVscc_>1v0B6A(_(F;X2r zQP0Box2F3E_@jhOwT9z@>>Y*Shd`$gk)>=ciK`owW3S$_;go^SygI0ek>v|f9ncj! zmvTAJ?tR3Y70O{VJdl?5o(Se<6` z4m&GK608tg$%P7eQ6ANNmnyY(GfIfW^~p+@pl2E3T3tGmn5%;!@j}f3xU$!etUc() zqW?ydKg{KK4^KM=2?>cZh+TmCZg8piNW3^?1W8Pt!Q!g+>Hl+IF1(wJ*_m$oAk!p5 z(NP=>$uyaA9xRz6(8@+Uc!b1-cY@Cg8VbCs8E1|cDw;Ph#yq%3PbWW<4`66(+2bPH zPyFN8RpnkpwYSs!D6#^wWM>sh%QiEJ3~Wp=AW2%s0$-mP3mDPc7Slw#3@LNm$u(9n zQfXmP87;+|m4&i~C|~H^?ma;iOrg3|qzPfNg~tg-NOLmq9+BiAFE^;9vQ>CM&UP`DulDm$pprX6LSHKw-8$K<);`N5_&EsOArzK*>mtc&M%jkh0)^eAE0-_NaKik`DvG)m1=N|T))bn3wM>LjOPI+M(YP?20;3- zE!WNSvi{NMtc$OIK=)(}{APPA0MW}Bcx|*(0W`GV>5FCb={m*b%qF)3{W!=Traj+q&DqermTB?ttvlo5B3}{;MjgF%hPPQ?6trAxWDrL?fapfhxN%(MPPfvO~dZXD-pq) z+H()oW1Tpjuy25Y@8qW;s+oLgeTsxitknLJ{7!!KFnA0c--hl1AqaO7zh+Hz`EyjJnfE=t zxPD4;Ex*I;x+Whz6!z{3_Nt&h7+HV)efk5{+_*Ac4>Ab z_Oc?K`RB~ROf@u|67>DtRQ5?8dbVudU;b@AD2{Pl)cj?9qpaL^OrDN<_8v9P#4OB! zJaApO7i}W=d_39Y8<;Ui1+`xP6D1a0`X0%F4tL-u! zGU=$(fZwS0Y4+Ea!>l1lUpO;q$Bc&5IXWXqjkbN)ChY4gK^YLDKb!Vs$eNVZ*L0xh z25}mr4kbp5NW-TRoiB4HYNu*(9Ldv%HJm6mX*cD+{=rYv?TmA`TxDE^5j_%R5s?W+ z*PjS)L~iKN?7`O|3SA9e+3sMYmmvZ!!!FaVuhGECOUHEx|7A(neQ!$-lw*_Qp_*C9 zP<6JEvgwF1@~C1^j-$g(wVNa|jmV%`i5~K4dZvBmp=6PXrtEIF1pp)@Lw!lSjV^?w zEG#WP{4f30u-kqENsj_M`404=Qb<$f3}9JdM__B&en_TIpcJA!5k`&MxJ2sHw@*Tb z+k}sV4{^3pd{R)zhN)H~5l;)~db!CwHMBO^R5_VC7Rw~bTpZb#G8x011%wkp@H)^!*5a$j<7a8>ZmFs$>;v&wyGZQS_8rNw;=6AxZ6 z{>XGNH;U=C?l@(em(PvG7pt-|%an-%4&~D(lar3wn>4w?$>w4j)ZOeTl zgzM#ofq!DhmHE!_qNf+O12zZtO0ZGzDd3T>0Od*Sb|@?SPyA&-+T-Z6t+!ZwGYPlQ z-%s&Jj^oO@_zmvInCGd>5Z;H}rT}*VDFJ~0_07riFW5lv_dxIdD+v8z+$mh@_SOA3%l`)q}6<>5&#_FvKSjM0Qlv{ zlYf`HXK?XrZY}oZ^(F1ar0-B{2i5=#dkAkN>VRPBK@v0t2TewS*Fdfq`Yo2M5Cz28Z~M?^Y3% zgA_sY^Nh@*g@T4Rbr03nK9qxo=Ndp8kX6TG2$6GnBb|`ADKfRQv2i$JMhgfXoe^!g z3)g=0aD1Sm8E^Up@U-0N&IE4=^b|K1KLDHQfV3x_&tkAzY0XL8%-aDx6fvcHA>)!#_uCH%d_2*n(AJBMQ%R! z3lyf%<|1hbW}0z^L{(UtFK|JWSnCK9YmqxFlKmA*$Tn`8jIBdkFl`Yl@pkV5qnxp#!E(MM2a{mkrJ0yz z^qCeVm~g`0hN>vrL5uljdMhyo6F)Up>>`mBd;oxdI>mz!E3cZa8n^cd z4O&hgHtgjW#zu=wig5Ql+q`10meVU`5iRe64q35LG5v&6ndmI(4_M9BSpI+Z@za7% zAsj>Bt}+ZuRsN3X3(*;)SsPtzK-+o_!k%}U|Exy@*r%$O4kS-0 zK*FvNMLsq*IDVe$$^2z3I5h;b2JI2LZS1)Q`5e+?3|NDG4*g>szypR761->31BDVg zwCBVF5f@UtXUzi>7kaP<~T*e!!s*H^9j?AkjAv5ktp^jrE&>oNs|Z2m$mw zD5bD$5DpMQ06Pz+ebB*)e+%4m(7=g%3-V=f5hMhJ5x~rYo(=l|fdf$laEU|0_q=X> zf#BU}hEU95>HTsbi(3~UbT@_}bbZ)rzuiA*L2n>rH~J0~AgsM#59Dy`0fg{-4MV)JBa_*;FZ{y#2-vJgk&HdM02b5`t6g@AG|NbXrLa%eGB)A;}6>xF5FK7 zQo6NzMf}A63lk6?&@T)!x&^$VTB4z;7~{BRj6vWuhFH`XW83kBUpNWQ9KdWrdyZ^7 zd2Ug-vRp^{fOa}iucJRee}Q1c5wM^EARKX2I0yuUB94>-%>$8$qsKsZKnNydB7(JH z99era*k5Zyn0J%{-;@T_?l=U9xc9$xz;hpDc0kV#Hs28n;LZ*`+(C4sF%L%HVRU0L z4^7@7{6l~otiHqV#;G5=xP$3N{{Uj*TU!!KBEnWUMNkkH$Lcu;p(xHvp!#ivfrsIl z#6)+5Om+lq-l@D=`yvV9kc7vN(d=Q~$-J6(e*+AZ@2TC{0O@za+7F0;G&`Z52ZBIm zA)=cht3CERomcyA5|aLZl-745zHs^Bvtzh>h<6gNroQmKSVm#YV_JLkcN(v@zR0~e zM&b2i+i9^lUN)#nrPFZx$Vz-Zr|(H-E`^Aq+j=2z&~=ocIUGDIkv zP9mn43YvrphJ^~ch6<*uX|6W&@d!*~^qR&cwFj233OLBmo0ik3i9Qu(;3zRbTRDOL>I zJiLvaQSzYI42mLjzN5d5Nb*$S{%4kVbXCLlLz&+u5)DB? zXf?K@j%~xW%$-9^u&$PhEMTTg1eB{2gYm?*iuJv8O>H(<)T?`qYg}l*?03PcJ)@_f zgR;e|aMC}lJ%uNl%`y*%Rpr`s;3!qc(u&zhSXk+r-5&{` zg6<%Io(f?_cfJ0k$8WWvn+HRU1a24sGOvv1N*Iq6#4*VNmlf^A@QemsyzhMg{1x*F zIGEN#5vH8hD0YfT#o0HQ$iNWLTWBG!Q-B6)KIfyn4Mlky9evdTU-ZxPoNg|=Q;HN{ z8k7%)nENFUwdSM<=}l-r(ZxoacA^~ISZ&f3N)Hr{?oU-mp64Q61UYpTa%0m}g`wO` zNi?9GH%aR7(l1(SkIVAiR`Ql;ZK;;rxt+TAp*82KN+Lz%F`fD}#<2|i>doJAmt+%) z-^98oe$rK8W8gQcm=3vgD{D;9*ImUu-V(koYDi2vrSP)^`5JdX0(2X?&r*11lwuRB zi|(h48vD+rc1R`!byexA=I8zL%UezdHN#6pu_>c97GMA-23>a&*y3EZJo#;7hQ$%PAgDs}&Q53jcBaGmCRKxO!`h}7kp?ht%iP^Oz z5tzW8DuOPm?JTbTeuzD^`ri1*-kPC`?V}u!q)b!7!%Qk@a#?VqJPdak88ylQveu9K z&IHX-TO^nf_d5~j5IyK?uOKTS?MS75+>R~U@68-TB(w_h3PPVlxe}0t8S?~xzH}nw?Qcuv&}-xm?)@c-kX$| z@3oE{X}^`0jZLLe$pDd>>s8hlQTP2k@M=S$g;^xP#tBuI^#k1i{wK=!&C2MEpK(3{s7#ihy6DJGpjalb<7q#7t&qZ$M!}7qg#V#fy z>TlV_mp3&ji^@OZbo#iU&RJThkz9V&r1|xR!v7L4$d8!}Rojqul-8QWR^w!fpX1bPv=`f@S)G|$TFWh!2SoEwR zi$@{B$dzoH05|Vc&dgGbQ8$XS_YI*5J}%7YF!yW?;ho-GKP!4U6^JAF^;lQ_sa}6z ztiut~v1KIn`m{iKg-~TA2i7JiLjYg7K`jTERtpYY!Lb?gk60lr*Lwl1wJjQQX`>BA z`M~;oyaqdLTEHe*)RH%{sxsm`n~KL)=%eFDAyJ)-^h32@b4ltIH*OZypT~o@hb5Vh z+|4_exidcax31<>+O9{2q2akGh29IR5R{8|*~jcBNnV*ZK8m^4a=YnFM)Yx%(gZgz zH>nC9G>S!BXCAaRf{5C`QE;Ye@5<0^_m^jld||mdcnR94 zDhgz|hThG45&#C|qnGa~Fi|0j$})7@tuuGlg+w}4 zZDm9sc708CEA=)sTE3Baoja=91$OwrXHqF#3d1so4eFCLr>1>1)rWo3EgVdbanbl4oI>IoJ05OGov9L^9%W6@90*>pZAv zGW73yTWPQJ&wsR|mE~gvhRNAT=d2ZD1;oMLNas&Ye^!DdGweA#tX<}1E%}RQV!3dM zn7Z^?Dth~&18UhTW(vHc5htK2&SNUri}J1=7DaX0>jpYt4)9~_SpK_nE305wIT1lk zkriWIwz-+3*wLA{;teI1eU_AMq1(QgMFY4aWHf9Yscr)DY&$Yw**2Zf^q+^#;|N?(rrUv%``gwjHPHY zf{8*KmvKcR+I`;Cpyj{2=WIn|5yTYQShd6y-nEwvg*KEb38lg;K@wy#Sn5li)=u+> zMI)hyMbi@D(M-5KTSY|;GSqUS_xedxWI7oCE1G7aIe>{U6xv8hBcwY2Kf&ue@n2_W z3*scrj6=e(ZN}u{=zC-oEl<7IqEq83dc9Zmf zsn#vUv(e?d?AeQ^;mG~gNTIM}NEaqdp^}+0-PTRS!~e~hFHrqwG*Kc)ZNPSxB$NLC zPzg#pQ6><=Q%XU|l%Nt2m0E0^GL>+GHst-XD*@$q1@oyk+s88~xCTttJzRE`)1U2` ZUtABnb?tu62nVk>KX+wfW(Hek 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 o-IM%8o*ehr=#Iq=Q0BvwUBdJ3D + + + + + 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 0000000000000000000000000000000000000000..10106108dcab1059e118ffd080662ed92389f6b7 GIT binary patch literal 224 zcmZ?wbhEHb6l9QRIKsg2{rmT~Z{I$D{`}ReSAYNh{q^hDhYue(@t*9{u_A=gpfpKY#xG_U+rVXV3oq`}hCPqud@q0hZ)j|4ZfO*4@96AmXXx$g MpD=OKL`4Q`01r2Tt^fc4 literal 0 HcmV?d00001 diff --git a/filer/static/filer/img/icon_changelink.gif b/filer/static/filer/img/icon_changelink.gif new file mode 100644 index 0000000000000000000000000000000000000000..0bd9d502b110a4832d936824c55851d96b138831 GIT binary patch literal 1178 zcmZ?wbhEHbe z|NsAIKmv;Yxg&f76kHNZ5`naheMLcHa&~HoLQ-maW}dCm``!DM6f#q6mBLMZ4SWln zQ!_F>s)|yBtNcQetFn_VQ=?N zk^)#sNw%$$BS=C4WT$g}QL2Kep0RGSfuW&-nVFuUiK&^Hp^k!)fuWJU0T7w#8k$&{ znpqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Umxn8-kUVc%!zM-Y1CCCgTBVC{h z-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VTY?Xj6g?J&i0B&qvu^!kvddc~@ z`W1-<`i6Q2ATPlb`ugHmnwtw(U0f2Bif}JhgNs8d3sUuiQj7CTi;`1;%9TM@6<9eJ zr6!i-7lq{K=fFZSAS1sdzc?emK*2fKOhLmpF*!32B%le_;p=PVnO9trn3tUD>0+w{ zG(#^lGsVin%)-Uc(%I6;!obDQ(ACJv+}y;?)!5wG)X31t$G&eP`1g19y zq1O?oUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+d7Ppu=8M>GlnHw3IyWwyPL~jaiw^-nG zi$2gX`k<&qifWh;F#Uj-@PrHGz>|Jz9x%NZ0TVXk|9^k~{QmXx$MeX-RQWVL^UgZccVqW=48iYD#iaVnTde zY)o`iWJGvaXh?8SV1U1$uaCEvr-!?ntBbRfql3Mjt&O#nrG>efsfn?Xp@F`hu8y{r zriQwjs*19bqJq4ftc%1*XSQL?vFu&J=B$SufCElE_U$j!+swyLmIN=(U5 zO0@#ALBje<3ScEA*|tiKAPEJKozD41sS2igX1d7+h9(N;mU@P!X6BaWItoTWzP^El zzL9~hfu)tHv6X?50u(3#Z7WJivkG!?gW3h;*(zm}loVL$>z9|8>y;bpKhp88yV>WRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$AbT4JjNbScCOxdm`z z^NRJr-qB0W&(*I;EYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9yACy|0Us{x$ z3RJEPvZ}z!xhOTUB)=#mKR*W+iUAq^MGl-2$;AT|Nr~@=l8FlKfZta`sMSdk00K@ zd;8|~tCugHKYRM*@uPt zi4*$!dV9LNIy>6iT3ec%8XM~CYHO;iDl5v%N=u513Jdb{a&xk?GBeWCQd5$X5)DCA|t}XLPLUs0t5X0e0{vVJU!gqTwR=<93AZKY;CNqEP)YgYGQ0;XrQmBtD~)@ zsiCf>s-moDIqQaEO!ga!_Vsum%8N$+fuv literal 0 HcmV?d00001 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 %} -
- + 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/tests/foo_file.jpg b/filer/tests/foo_file.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e4936f713e63dda04b344bf13f836f735e8a719 GIT binary patch literal 11200 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 dzb>DMy@vn* literal 0 HcmV?d00001 diff --git a/filer/tests/new_three.jpg b/filer/tests/new_three.jpg new file mode 100644 index 0000000000000000000000000000000000000000..697f7c7fffeb382c85a96c1ff142d242f9f9cc76 GIT binary patch literal 1119 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!_R+RT5jFBTZ;33zdPAeav=CW!{)jv>w>y7 zw_g4y(bu)vv}dEY(K^ZGG|3aJO>>0Uif_%i#=GTB?%CgKc#_{Q%)cyZ^YLBo*Qo2; z^}nvazga6Vcsfh)u`V07 z&dPO9nk$<8##}OgV!^72xvv`-89vV`Ra)BbJ1Kg`qA=ax<@~lf<)L*%;{0@>HyqKEc3QGL z-shiH|E;@mLUYCZbG-A9OME#Sv}pEn@e3V~Ub|=3#b0;29jCCpLb+p=(ZthFnj$@I z?Qb$I_4Q<#V0|FsQ0R32KBpC5{xhV6)rwSGOxd_~@~+xldb3Mj*gnylxbmEG?BdVr dzb>DMy@vn* literal 0 HcmV?d00001 diff --git a/filer/tests/testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.jpg b/filer/tests/testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e4936f713e63dda04b344bf13f836f735e8a719 GIT binary patch literal 11200 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 bN-MI%ERwX}TfM>y>+re1s%g)mRMY+eB3*8Y literal 0 HcmV?d00001 From 8efb149cea5a709fa75934adeb6435a744bd0fd4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 30 Apr 2026 10:00:27 +0000 Subject: [PATCH 6/6] Remove accidentally committed test.zip Agent-Logs-Url: https://github.com/pbs/django-filer/sessions/cad30a66-0889-48ba-bb3e-2ab3bf2939b2 Co-authored-by: andreilupuleasa <124138251+andreilupuleasa@users.noreply.github.com> --- test.zip | Bin 2538 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test.zip diff --git a/test.zip b/test.zip deleted file mode 100644 index 0381d807ac99102a6d726b13b91b43912bc71ac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2538 zcmbW1y>HV%7{=YEMS?P9=vD^AQY0kWk~kk53@pu(4XLVR#h-V@_0_SHIFXQAiT?m* z2BZ!M!Nv?5EC{h8{slgUPO$JE?VX)h=h&{Ji!X}b-}~I-S5LoJTUpomb#L><{{PLz zR~_#0;n5Z>W)UyiNyt_|_vssor=gPix~q5WPW8$p*1Lyx;#IF?M}zjH5$X#nZx^Tq zvK9tjuqFG1-x&BlS%nN-&z&ktJ0eydFa^AZ&41yGv0(P7&@KGEk-zjm*IAAD`7 zePKq}9EHxzrNbz`={o~=eh?mg+3T)BDPIjWLJmUKTG-FF9WtFxS>#wOuodj9uipO= z@+z`vYhW9cjABBED)f&#U!Po3_G8y%77J~cjfOE%$R4h}sa23I=L9SX`~$N+j+skc zCHkYe@mioa)oy2phuML#Jc$qOUvuE{8R#=aMiUB5BMD%Lm8D{%~R_9;?;Lyi>u+c9MyiWEQzQ| z@->tvy;PH=VT(vSkIpZCy6>=EbUOGilX3Ycou}SfDx}I;F0YlSsnS2tn#sVjTHmUv z(o3LbGI5@YQ&Bj3d~%jUy~s#>Xq=5HsJ&chrF=mkRU{>DfCDmZ@T^(`5tq0Dj>)va z&uR@sXyOJqE7JzMwL**Jw1Gt;IdKD=m}!Gkb%X5SiTuP+oSP~1tQaa%6hm=#rqG8g bN-MI%ERwX}TfM>y>+re1s%g)mRMY+eB3*8Y